所以说我有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?
答案 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()
获取苹果的颜色。