1

我有以下类定义:

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

和界面:

public interface Weighted{
    public long getWeight();
}

叙利亚边缘类没有该方法public long getWeight(),但一切似乎都可以正常编译。

我错过了什么?为什么接口不强制类有它的方法?

4

2 回答 2

7

如果您看一下这个基本示例:

interface Weighted{
    public long getWeight();
}

abstract class Parent implements Weighted {

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

}

class Child extends Parent {}

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

于 2013-11-05T11:45:19.323 回答
3

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

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

于 2013-11-05T11:45:54.097 回答