试图使用子类方法,但它不让我

时间:2014-01-25 04:26:37

标签: java inheritance

所以说我有3个类,Tester,Fruit(超类)和Apple(子类)

我在Apple中编写了一种新方法(扩展了Fruit)。方法是:

public String getAppleColor()

现在在Tester中说我创建了一个10 Fruit的数组

Fruit fruitArray = new Fruit[10]

并说我做了其中一个

fruitArray[3] = new Apple()

这很好,因为Apple也是Fruit类型。但是我希望在数组的这个特定元素上使用我的getAppleColor():

String appleColor = fruitArray[3].getAppleColor();

为什么这不起作用?当我在eclipse中查看fruitArray [3]上的可用方法时,我的Apple方法都没有出现,但是我将fruitArray [3]变成了Apple?

4 个答案:

答案 0 :(得分:2)

您无法在getAppleColor()引用上调用Fruit,也不会声明该方法

更好的设计将定义getFruitColor()并使Fruit抽象类/使其成为接口并强制每个Fruit实现此方法

编译器不知道它将在运行时分配什么实现

答案 1 :(得分:2)

您必须将其强制转换为Apple,因为编译器不会知道fruitArray[3]将包含Apple(它可能包含任何其他类型的Fruit)。尝试:

String appleColor = ((Apple)fruitArray[3]).getAppleColor();

答案 2 :(得分:1)

编译器无法知道在运行时,声明为Fruit的元素实际上是Apple。因此,它不会让您调用Apple中声明的任何方法。

您的数组是

Fruit[] fruitArray; 

编译器只能知道数组中的元素是Fruit个实例,仅此而已。

答案 3 :(得分:1)

您最好在类getColor()中声明方法Fruit,在子类Apple中覆盖它,然后您可以通过fruitArray[3].getColor()获取苹果的颜色。