2013-05-25 36 views
2

例如,我有類人,我想覆蓋克隆()函數。clone()的返回類型應該是什麼?

clone(),Object或Human的返回類型應該是什麼?我知道返回類型在重寫過程中沒有任何作用,因爲它不在函數的簽名中。

例如,在類人應該我有

public Object clone() throws CloneNotSupportedException { 

    Human h = (Human)super.clone(); 

    h.age = age; 
    h.name = name; 


    return h; 
} 

,然後在主

public static void main() throws CloneNotSupportedException { 



    Human h = new Human("Slavco", 49); 

    Human z = (Human)h.clone(); 
} 

OR

public Human clone() throws CloneNotSupportedException { 

    Human h = (Human)super.clone(); 

    h.age = age; 
    h.name = name; 


    return h; 
} 

,並在主

public static void main() throws CloneNotSupportedException { 



    Human h = new Human("Slavco", 49); 

    Human z = h.clone(); 
} 
+0

是什麼原因*不*返回'Human'?是的,返回類型*確實有重寫規則:它應該是原始返回類型的子類型。 – Elazar

+0

使用第二種方法。 –

+0

它們都重寫默認的Object構造函數,但在方法定義中返回Human更清晰,它還允許您在人類對象上調用clone並且不必投射。 – greedybuddha

回答

2

返回Human會讓你的生活更輕鬆(可能爲你節省很多鑄件),並且沒有任何缺點。
我肯定會推薦這種方法。

+0

它也可以捕捉到愚蠢的錯誤。 – Elazar

+0

您是否試圖以這種方式實際實現clone()? –

+1

@DonRoby編譯自'Human'是'Object'的子類。返回類型不一定是相同的。 –

相關問題