Group
实现Figure
接口,并声明一个公共addFigure
方法。为什么不能在addFigure
组对象上调用g1
方法?
public interface Figure {
void draw();
}
public class Group implements Figure {
private List<Figure> figures;
public Group(Figure... figures) {
this.figures = new ArrayList<>();
for (Figure f : figures) {
this.figures.add(f);
}
}
public void addFigure(Figure f) {
this.figures.add(f);
}
@Override
public void draw() {
for (Figure f : figures) {
f.draw();
}
}
}
public class Main {
public static void main(String[] args) {
Figure r1 = new Rectangle();
Figure r2 = new Rectangle();
Figure r3 = new Rectangle();
Figure g1 = new Group(r1, r2);
Figure g2 = new Group(r2, r3);
g1. // <- only `draw()` availabe, no `addFigure(Figure)`
}
}
最佳答案
发生的事情是您在实例化Figure
实例时定义了Group
类型。
您的Figure
接口定义了draw
方法,但没有定义addFigure
方法。该方法在Figure
接口的实现中定义。
当您通过接口创建实例时,即使实际实例属于实现类型,您也必须绑定到该接口中定义的方法。结果,您需要将该实例转换为Group
,它将起作用。