我有以下类定义:
public class SyrianEdge extends BaseEdge<SyrianVertex, SyrianEdge>
implements Weighted, Blockable{
...
}
界面:
public interface Weighted{
public long getWeight();
}
SyrianEdge类没有方法public long getWeight()
,但一切似乎都可以正常编译。
我错过了什么?为什么界面不会迫使班级拥有其方法?
答案 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中声明的所有方法)。