【发布时间】:2014-04-28 13:35:41
【问题描述】:
我有一个名为“Shape”的父类,它有一个子类“Circle”。 Circle 类继承了 Shape 的属性,并具有一个附加参数“radius”,以及一个名为 getRadius() 的方法。
最后我有一个“ShapeList”类,它包含一个不同形状的 ArrayList,以及各种添加/删除函数。
我正在尝试打印圆的半径:
System.out.println(shapeArray.getShape(1).getRadius());
shapeArray 是形状列表,getShape 返回一个特定的形状对象。但是,当我尝试使用 getRadius 时,它查看的是 Shape 类而不是特定的 Circle 子类,因此无法识别该方法,我该如何访问半径?
【问题讨论】:
-
你应该cast
Shape。有关详细信息,请参阅"Inheritance (The Java Tutorials)"。 -
因为它只知道Shape,不知道Circle。
-
每个人都说你应该投。虽然在技术上是正确的,但我会退后一步,问为什么通用形状列表应该特别注意半径
-
Brian 有一个很好的观点...这就是我在下面提到的最重要的方法...
-
这是一个通过编译时正确的解决方案解决的问题。基于铸造和反射的解决方案是荒谬的。重写一个方法是愚蠢的——它污染了
Shape的签名并最终创建了一个接口,上面有很多奇怪的疣,以至于没有任何意义。这是访问者模式的确切情况。
标签: java inheritance