Java覆盖冲突 - 具有不同返回类型的相同名称

时间:2012-07-22 04:24:22

标签: java conflict name-collision

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

public class mTreeNode extends File implements TreeNode{}

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

文件类上的

public String getParent(){}与返回类型 TreeNode 接口上的public TreeNode getParent()发生冲突。

我们如何解决? (例如为什么不能将Object类用于返回类型!)

最后我决定在课堂上使用一个文件对象。

2 个答案:

答案 0 :(得分:2)

由于TreeNode是一个接口,因此您需要使用 exact 签名来实现该方法。它是实现它的类与编译器强制执行的外部世界之间的契约。

您可以阅读更多相关信息here.

答案 1 :(得分:1)

实现接口的类可以声明covariant return types。因此,实现接口的类中的返回类型必须与接口匹配或者是接口的子类。

e.g。

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