2012-07-22 55 views
0

我试图创建一个扩展文件类(java.io.File)一类并实现树节点界面如下图所示:的Java覆盖冲突 - 与不同的返回类型同名

public class mTreeNode extends File implements TreeNode{} 

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

public String getParent(){}文件类与上返回类型public TreeNode getParent()树节点接口冲突。

我们该如何解决? (例如,为什么不能使用Object类作为返回类型!)

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

+5

'我们该如何解决它?'使返回类型匹配。 – Mysticial 2012-07-22 04:25:30

+0

什么版本的Java? TreeNode的代码是什么? – TofuBeer 2012-07-22 04:27:17

+0

Google on [inheritance vs composition](https://www.google.co.in/search?q=inheritance+vs+composition) – Jomoos 2012-07-22 04:27:35

回答

2

由于TreeNode是一个接口,你来实现其确切签名方法所需。它是实现它的类和编译器强制执行的外部世界之间的契约。

你可以阅读更多关于它here.

1

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

例如

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