0

Fileクラス ( ) を拡張し、以下のようにTreeNodejava.io.Fileインターフェイスを実装するクラスを作成しようとしました。

public class mTreeNode extends File implements TreeNode{}

TreeNodeメソッドを実装しようとしましたが、競合が発生しました。

public String getParent(){}on Filepublic TreeNode getParent()クラスは、戻り値の型でon TreeNodeインターフェイスと競合しています。

どうすれば解決できますか?(たとえば、戻り値の型に Object クラスを使用できない理由など!)

最後に、クラスでファイル オブジェクトを使用することにしました。

4

2 に答える 2

2

はインターフェイスであるため、正確なシグネチャTreeNodeを使用してそのメソッドを実装する必要があります。これは、それを実装するクラスと、コンパイラによって強制される外部世界との間の契約です。

詳細については、こちらをご覧ください。

于 2012-07-22T04:29:38.747 に答える
1

インターフェイスを実装するクラスは、共変の戻り値の型を宣言できます。したがって、インターフェイスを実装するクラスの戻り値の型は、インターフェイスと一致するか、インターフェイスのサブクラスである必要があります。

例えば

class Foo {
    public String toString() {
        return "foo";
    }
}

interface Interface {
    Foo getFoo();    
}

class Bar extends Foo {
    public String toString() {
        return "bar";
    }
}

class Concrete implements Interface {
    public Bar getFoo() {  // <============= Covariant return type
        return new Bar();
    }
}

public class Example {
    public static void main(String[] args) {
        System.out.println(new Concrete().getFoo());
    }
}

クラスが出力されますbar

于 2012-07-22T05:01:03.627 に答える