例如:
abstract class Shape {
public abstract void move();
}
class Circle extends Shape { ... }
class Square extends Shape { ... }
...
Shape[] shapes = new Shape[10];
shapes[0] = new Circle();
shapes[1] = new Square();
...
for (Shape i: shapes)
i.move();
等
我试过这样做,理论上似乎没问题,但是当我尝试运行它时,我一直收到一个未知错误(“线程中的异常”主“java.lang.Error:未解决的编译问题”)。在运行它之前,它给了我这些奇怪的错误警告:“{在此标记之后预期。”我仔细检查了所有的括号都没问题。我应该只使用界面还是其他东西?
编辑:我修好了,但它对我来说仍然没有意义。错误在于:
Shape[] shapes = new Shape[2];
shapes[0] = new Circle();
shapes[1] = new Square();
我把它更改为:
Shape[] shapes = new Shape[2];
{
shapes[0] = new Circle();
shapes[1] = new Square();
}
突然间它起作用了。什么?
编辑2:没关系。我在一个方法之外初始化了数组。
答案 0 :(得分:2)
Eclipse有一个“功能”,您可以在其中运行无法编译的代码。我强烈建议你不要使用它,因为它只会延迟发现错误(最大化修复它们的成本)
当您关闭此功能时,您将找到未编译的代码行,并且可能与使用子类没有任何关系。
简而言之,你可以做到这一点,错误可能是不相关的。
答案 1 :(得分:0)
仅在声明时允许在方法外部(在类级别)初始化变量。
所以你可以在方法之外调用它:
Shape[] shapes = new Shape[2];
但你不能在方法之外调用它:
shapes[0] = new Circle();
shapes[1] = new Square();