1

次のクラス定義があります。

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

そしてインターフェース:

public interface Weighted{
    public long getWeight();
}

クラスSyrianEdgeにはメソッドがありません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

拡張しているので、 Weighted を実装し、メソッドを実装したとBaseEdge安全に想定できます。BaseEdgegetWeight()

継承ツリー内のいずれかのクラスがインターフェースを実装している場合、ツリーののクラスでIを使用しても、既に実装されているためエラーは発生しません (ツリーの上にあるすべてのクラスが最初の具象である場合を除きます)。クラスは、インターフェイス I で宣言されたすべてのメソッドを実装する必要があります)。implement I

于 2013-11-05T11:45:54.097 に答える