0

我有一个名为Shape抽象的类,以及一个名为Circle扩展形状的类

Shape shapeCircle = new Circle();

我可以很好地设置和获取 shapeCircle 的颜色,因为颜色获取器和设置器位于 Shape 中,但 Circle 的尺寸仅适用于 Circle 类(半径)。

如果 Circle 类有一个实例变量private int radius和一个名为 的方法getRadius(),我如何获取/设置 的半径shapeCircle?我试过shapeCircle.getRadius();了,但没有运气。

4

4 回答 4

3

对象 shapeCircle 只能访问 Shape 的方法。shapeCircle 是 Shape 类型,Circle 中的方法不可见。

通过使用这个,

 Circle shapeCircle = new Circle();

您可以同时调用 Circle 和 Shape 的方法。上述情况仅利用Inheritance

编辑

但是如果你添加public abstract int getDimension();ShapeCircle类实现getDimension()方法

@Override
    public int getDimension() {
        return radius;
    }

所有扩展的类都Shape需要实现getDimension()方法。但是每个子类都有自己的维度。

您可以使用

    Shape shapeCircle = new Circle();
    shapeCircle.getDimension();

这利用了多态性和抽象类

于 2012-10-11T07:04:56.067 回答
2
Shape shapeCircle = new Circle();

这里的参考是 Shape 和 shape 类没有定义半径变量。所以你不能使用shapeCircle.getRadius();

要调用 get/set radious 方法类型,请像这样转换 shapecircle 变量

Circle shapeCircle = (Circle)shapeCircle;

现在您可以调用 get/set radious 方法。请注意,类型转换代码应该采用某种不同的方法来使用多态性。

编辑:

您应该将抽象类或接口设计为具有所有重要/常见的操作/方法,这将有助于您编写多态代码。例如:Radius 字段是特定于 Circle 类的。但考虑到您最终要计算面积。所以你应该在你的抽象类中定义CalculateArea()方法,让每个形状都实现这个方法。这样,你就实现了多态。

Shape ShapeCicle = new Circle(Radius);
Float area = ShapeCircle.area();

要点是不要将自己局限于半径示例。尝试以某种方式定义类,以便您可以从多态性中受益。

于 2012-10-11T07:05:31.220 回答
0

'Shape is not Circle' = 圆形方法不适用于 Shape。

于 2012-10-11T07:05:19.783 回答
0

您必须在instanceof此处使用关键字来检查原始类型。如果类型是Circle,那么您可以键入 cast 并调用该getRadius方法。就像是

if (shapeCircle instanceof Circle) {
 Circle circle = (Circle)shapeCircle;
 int radius = circle.getRadius();
}

应该这样做。

于 2012-10-11T07:03:23.197 回答