Oracle的文档中的错误示例

时间:2016-06-22 16:28:04

标签: java oop inheritance interface language-concepts

我阅读了this Oracle's article关于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的另一个实现进行比较,这不是&#39;实际上是RectanglePlus的一个实例。我认为,这种接口的使用是有效的,而问题在于实现。

你怎么看?可能我不明白?

1 个答案:

答案 0 :(得分:0)

你是对的。如果isLargerThan的{​​{1}}不是Relatable(或其任何子项)的实例,则此代码可能会抛出强制转换异常

他们应该检查使用RectanglePlus传递的对象的类。