设置扩展抽象类的子类的实例变量

时间:2012-10-11 06:59:11

标签: java swing polymorphism abstract shapes

我有一个名为Shape的类是抽象的,一个名为Circle的类扩展了Shape

Shape shapeCircle = new Circle();

我可以设置并获得shapeCircle的颜色,因为颜色的getter和setter是Shape,但Circle的尺寸仅适用于Circle类(radius)。

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

4 个答案:

答案 0 :(得分:3)

  

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

使用这个,

 Circle shapeCircle = new Circle();

你可以同时调用Circle和Shape的方法。上述情况仅利用继承

修改

但是如果你在public abstract int getDimension();类和Shape类实现Circle方法中添加getDimension()

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

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

您可以使用

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

这利用了多态和抽象类

答案 1 :(得分:2)

Shape shapeCircle = new Circle();

这里引用的是Shape,而shape类没有定义radius变量。所以你不能使用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();

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

答案 2 :(得分:0)

您必须使用instanceof关键字来检查原始类型。如果类型为Circle,则可以键入强制转换并调用getRadius方法。像

这样的东西
if (shapeCircle instanceof Circle) {
 Circle circle = (Circle)shapeCircle;
 int radius = circle.getRadius();
}

应该这样做。

答案 3 :(得分:0)

'形状不是圆'=圆形方法不适用于Shape。