0

我的主要方法如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package excercise.pkg5;

/**
 *
 * @author Azraar
 */

    public class TestResizable {

    public static void main(String[] args) {

        Shape obj[] = new Shape[4];
        obj[0] = new Circle(10);
        obj[1] = new Rectangle(10, 20);
        obj[2] = new ResizableCircle(10);
        obj[3] = new ResizableRectangle(10, 20);

        for (int i = 0; i < obj.length; i++) {

            if (obj[i] instanceof ResizableCircle) {
                ResizableCircle r = (ResizableCircle) obj[i];
                obj[i].equals(r);

            }

            if (obj[i] instanceof ResizableRectangle) {
                ResizableRectangle r = (ResizableRectangle) obj[i];
                obj[i].equals(r);

            }

            System.out.println("");
            System.out.print("Object is - " + obj[i].name());
            System.out.print("\nObject Area is - " + obj[i].area());
            System.out.print("\nObject Perimeter is - " + obj[i].perimeter());
        }

    }
}

我正在使用ResizableRectangle r = (ResizableRectangle) obj[i];,因为 resizable 是一个实现,并且 ResizableRectangle 和 ResizableCircle 正在扩展它并覆盖 resize 方法。

如果 instanceof resizbleRectange 或 resizableCircle .. 我需要运行这个 resize() 方法..

obj[i].resize(0.5)然后它将循环输出并打印。但问题是我没有得到真正的智能调整大小方法,当我输入它说找不到符号时......

下面是类层次结构......

在此处输入图像描述

编辑:

shape 是根类,如您在随附的屏幕截图中所见。当对象是 ResizeableClass 和 ResizeableRectangle 的实例时,我正在考虑一种访问 resize 方法的方法。但仍然无法。

4

4 回答 4

2

您需要调用resize()参考Resizeable

也就是说,如果obj[i]是 a Resizeable,那么您需要强制转换然后调用它。仅仅断言引用这样的对象是不够的,obj[i]因为编译器只是将其视为基类引用。

例如

if (obj[i] instanceof Resizeable) {
   ((Resizeable)obj[i]).resize(..);
}
于 2013-09-13T12:19:13.190 回答
1

您声明obj

Shape obj[]

所以obj[i]会返回一个Shape我猜不会扩展的对象Resizeable

于 2013-09-13T12:20:57.103 回答
1

并非所有 Shape 方法的子类都实现了 Resizable 接口。因此,您需要检查是否obj[i]是 Resizeable 类的实例,然后对其调用 resize 。

于 2013-09-13T12:25:17.133 回答
0

这终于奏效了...

    if (obj[i] instanceof ResizableCircle) {
        Resizable c = (ResizableCircle) obj[i];
        c.resize(5);

    }

    if (obj[i] instanceof ResizableRectangle) {
        Resizable r = (ResizableRectangle) obj[i];
        r.resize(10);

    }
于 2013-09-13T12:46:53.977 回答