
这是我编的一个java小程序,刚学没基础,我不知道错在哪里了,一直都不知道怎么改:希望大家给点指点
题目,如下:首先编写一个抽象类,要求该抽象类有三个抽象方法:publicabstractvoidf(intx);publicabstractvoidg(intx,inty...
题目,如下:
首先编写一个抽象类,要求该抽象类有三个抽象方法:
public abstract void f(int x);
public abstract void g(int x,int y);
public abstract double h(double x);
然后分别给出这个抽象类的3个子类。要求:在应用程序的主类中使用这些子类创建的对象,再让他们的上转型对象调用方法风f(),g(),和h().
代码如下:
abstract class A
{
public abstract void f(int x);
public abstract void g(int x,int y);
public abstract double h(double x);
}
class B extends A
{
public void f(int x)
{
System.out.println("x");
}
}
class C extends A
{
public void g(int x,int y)
{
System.out.println("x+y");
}
}
class D extends A
{
public double h(double x)
{
return Math.sqrt(x);
}
}
class Text
{
public static void main(String args[])
{
A i=new B();
i.f(2);
A j=new C();
j.g(2,3);
A k=new D();
k.h(9);
}
}
但是错误如下:
---------- javac ----------
Test.java:8: B 不是抽象的,并且未覆盖 A 中的抽象方法 h(double)
class B extends A
^
Test.java:17: C 不是抽象的,并且未覆盖 A 中的抽象方法 h(double)
class C extends A
^
Test.java:27: D 不是抽象的,并且未覆盖 A 中的抽象方法 g(int,int)
class D extends A
^
3 错误
Output completed (0 sec consumed) - Normal Termination 展开
首先编写一个抽象类,要求该抽象类有三个抽象方法:
public abstract void f(int x);
public abstract void g(int x,int y);
public abstract double h(double x);
然后分别给出这个抽象类的3个子类。要求:在应用程序的主类中使用这些子类创建的对象,再让他们的上转型对象调用方法风f(),g(),和h().
代码如下:
abstract class A
{
public abstract void f(int x);
public abstract void g(int x,int y);
public abstract double h(double x);
}
class B extends A
{
public void f(int x)
{
System.out.println("x");
}
}
class C extends A
{
public void g(int x,int y)
{
System.out.println("x+y");
}
}
class D extends A
{
public double h(double x)
{
return Math.sqrt(x);
}
}
class Text
{
public static void main(String args[])
{
A i=new B();
i.f(2);
A j=new C();
j.g(2,3);
A k=new D();
k.h(9);
}
}
但是错误如下:
---------- javac ----------
Test.java:8: B 不是抽象的,并且未覆盖 A 中的抽象方法 h(double)
class B extends A
^
Test.java:17: C 不是抽象的,并且未覆盖 A 中的抽象方法 h(double)
class C extends A
^
Test.java:27: D 不是抽象的,并且未覆盖 A 中的抽象方法 g(int,int)
class D extends A
^
3 错误
Output completed (0 sec consumed) - Normal Termination 展开
4个回答
展开全部
当一个类继承抽象类,只有两种状况:
1. 这个类是一个普通的类。也就是说,他要实现父类中的所有抽象方法,然后成为一个普通的类来使用。
2. 这个类也是一个抽象类。他不用实现父类中的所有方法,只要选择性的实现一部分方法,或者扩展方法。甚至可以什么也不做。
你这里属于第二种,3个抽象方法里每个子类都只实现1个方法,还有两个方法是抽象的。 这种是带有抽象方法的普通类。。。 这个当然出错了。
解决方法:
1. 把这3个类都写成抽象的。
2. 这3个类都要完全实现A中的3个抽象方法。
1. 这个类是一个普通的类。也就是说,他要实现父类中的所有抽象方法,然后成为一个普通的类来使用。
2. 这个类也是一个抽象类。他不用实现父类中的所有方法,只要选择性的实现一部分方法,或者扩展方法。甚至可以什么也不做。
你这里属于第二种,3个抽象方法里每个子类都只实现1个方法,还有两个方法是抽象的。 这种是带有抽象方法的普通类。。。 这个当然出错了。
解决方法:
1. 把这3个类都写成抽象的。
2. 这3个类都要完全实现A中的3个抽象方法。
展开全部
子类继承父类的同时,也获得了父类的属性和方法,父类里面如果包含抽象方法,那么子类里面同样的会继承父类里面的抽象方法,如果你不对该抽象方法进行重写,那个,子类必须是抽象类,因为里面有抽象方法,你再看看你写的代码与我所说是否违背
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
abstract class A
{
public abstract void f(int x);
public abstract void g(int x,int y);
public abstract double h(double x);
}
class B extends A
{
public void f(int x)
{
System.out.println("x");
}
public abstract void g(int x,int y){
};
public abstract double h(double x){
};
}
class C extends A
{
public void f(int x)
{
}
public abstract void g(int x,int y){
System.out.println("x+y");
};
public abstract double h(double x){
};
}
class D extends A
{
public void f(int x){
}
public abstract void g(int x,int y){
};
public abstract double h(double x){
return Math.sqrt(x);
};
}
{
public abstract void f(int x);
public abstract void g(int x,int y);
public abstract double h(double x);
}
class B extends A
{
public void f(int x)
{
System.out.println("x");
}
public abstract void g(int x,int y){
};
public abstract double h(double x){
};
}
class C extends A
{
public void f(int x)
{
}
public abstract void g(int x,int y){
System.out.println("x+y");
};
public abstract double h(double x){
};
}
class D extends A
{
public void f(int x){
}
public abstract void g(int x,int y){
};
public abstract double h(double x){
return Math.sqrt(x);
};
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你继承的父类是抽象类,本身这个类不是抽象类,那么你就要实现父类中所有的抽象方法!! 已经提示很明显了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询