Java接口未强制执行

时间:2013-11-05 11:41:22

标签: java generics

我有以下类定义:

public class SyrianEdge extends BaseEdge<SyrianVertex, SyrianEdge> 
                        implements Weighted, Blockable{
    ...
}

界面:

public interface Weighted{
    public long getWeight();
}

SyrianEdge类没有方法public long getWeight(),但一切似乎都可以正常编译。

我错过了什么?为什么界面不会迫使班级拥有其方法?

2 个答案:

答案 0 :(得分:7)

如果你看一下这个基本的例子:

interface Weighted{
    public long getWeight();
}

abstract class Parent implements Weighted {

    @Override
    public long getWeight() {
        return 0;
    }

}

class Child extends Parent {}

由于Parent类已经实现了此方法,因此Child类没有义务实现它。

答案 1 :(得分:3)

由于您要扩展BaseEdge,因此可以放心地假设BaseEdge实施了加权并实施了方法getWeight()

如果继承树中的任何一个类实现了接口I,那么在任何类向下上使用implement I,树将不会产生任何错误已经实现(除了树中的所有类都是抽象的情况,第一个具体类应该实现接口I中声明的所有方法)。