0

我尝试创建一个扩展File类(java.io.File)的类并实现TreeNode接口,如下所示:

public class mTreeNode extends File implements TreeNode{}

并尝试实现TreeNode方法,但发生了冲突。

public String getParent(){}on File类在返回类型上与public 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 回答