2012-07-22 60 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