继承和抽象参数传递

时间:2014-06-04 09:51:13

标签: 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();
   ...
}

但是当我这样做时,我收到了编译错误。

我不明白为什么?为什么我不能按我的要求编写void testFunction(A classA)? (我知道在c ++中我可以做到)

由于

1 个答案:

答案 0 :(得分:1)

问题是您可能没有在班级getItem()中定义方法A

您可以通过在类A中添加此行来定义它(如果您不想/可以,则无需指定具体实现):

abstract public MyItem getItem();

通过这种方式,方法签名在类A中定义,因此当您声明了类A的对象时,可以调用它。

然后所有扩展A具体类(例如类C1C2C3)必须强制实现方法{{ 1}}通过覆盖它。您还可以在方法实现之前添加getItem()表示法,例如:

@Override