我读了这篇Oracle关于Java接口的文章。我认为,提供的示例很糟糕。他们使用以下示例:
public interface Relatable {
public int isLargerThan(Relatable other);
}
public class RectanglePlus implements Relatable {
public int isLargerThan(Relatable other) {
RectanglePlus otherRect = (RectanglePlus) other;
if (this.getArea() < otherRect.getArea()) {
return -1;
}
else if (this.getArea() > otherRect.getArea()) {
return 1;
}
else {
return 0;
}
}
是否可以将Relatable other
投给RectanglePlus
?我认为不是。在我的理解中,如果通过接口引用使用此类,并且有人会尝试将其与Relatable
的另一个实现进行比较,则此类实现将失败,这实际上不是RectanglePlus
的实例。我认为,这种接口的使用是有效的,而问题出在实现上。
你觉得怎么样?可能是我不明白什么?
你是对的。如果isLargerThan
Relatable
不是RectanglePlus
(或其任何子项)的实例,则此代码可能会引发强制转换异常
他们应该检查使用instanceof
传递的对象的类。