我有以下课程:
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(A classA)? (我知道在c ++中我可以做到)
由于
答案 0 :(得分:1)
问题是您可能没有在班级getItem()
中定义方法A
。
您可以通过在类A
中添加此行来定义它(如果您不想/可以,则无需指定具体实现):
abstract public MyItem getItem();
通过这种方式,方法签名在类A
中定义,因此当您声明了类A
的对象时,可以调用它。
然后所有扩展A
的具体类(例如类C1
,C2
和C3
)必须强制实现方法{{ 1}}通过覆盖它。您还可以在方法实现之前添加getItem()
表示法,例如:
@Override