Java 继承与抽象母题传递
我有以下课程:Java 继承与抽象母题传递,java,inheritance,Java,Inheritance,我有以下课程: Abstract class A Abstract class B extends A class C1 extends B class C2 extends B class C3 extends B 类C1、C2、C3实现了相同的抽象方法: public MyItem getItem() 在另一个类(比如X类)中,我有(想要有…)功能: void testFunction(A classA) { MyItem myItem = classA.getItem();
Abstract class A
Abstract class B extends A
class C1 extends B
class C2 extends B
class C3 extends B
类C1、C2、C3实现了相同的抽象方法:
public MyItem getItem()
在另一个类(比如X类)中,我有(想要有…)功能:
void testFunction(A classA)
{
MyItem myItem = classA.getItem();
...
}
但是当我这样做的时候,我得到了编译错误
我不明白为什么?为什么我不能编写void testFunction(classA)呢?
(我知道C++中我能做到)
谢谢问题是您可能没有在类
A
中定义方法getItem()
您可以通过在类a
中简单地添加这一行来定义它(如果您不想要/can,则不必指定它的具体实现):
abstract public MyItem getItem();
通过这种方式,方法签名在类A
中定义,因此,当您将对象声明为类A
时,可以调用它
然后,扩展A
的所有具体类(例如类C1
、C2
和C3
)必须通过重写来强制实现方法getItem()
。您还可以在方法实现之前添加@Override
符号,例如:
class C1 extends B {
@Override
public MyItem getItem() {
//concrete implementation
}
}
抽象方法是在哪个类中定义的?A还是B?你会得到什么编译错误?指定导致编译错误的行和错误是什么,这将有帮助。在没有更多的解释的情况下,我不能看到这里有什么东西,C++和java会有很大的不同。难道你不想说“我知道在Java脚本中我可以做到”?:)另外,作为旁注,您的命名
testFunction
表明您来自Java脚本世界:)。。检查是否可以使用接口而不是抽象类