我無法理解如何創建和實現複製構造函數,以及重寫的clone()方法(不在同一個類中)。創建複製構造函數和重載的clone()方法
我知道,對於「實際複製」,您必須深入克隆而不是簡單的克隆(這花了我很長時間才能找出...)。我在這裏找到的一個更明顯的解決方案(對我來說)是製作一個拷貝構造函數。
爲簡潔起見,假設我有一個Dog對象,它包含兩個整數。在另一個類Cat中,我有一個包含100個Dog對象數組的Cat對象(例如,Dog [] cat = new Dog [100])。我試過以下至今:
// for a copy constructor
public Cat(Cat cat) {
Dog[] copy = new Dog[100];
for (int i = 0; i < 100; i++) {
copy[i] = cat[i];
}
}
類似的東西總會給我一個類型不匹配(以下簡稱「類型的表達式必須是數組類型,但它決心貓」和「無法從貓轉換成狗「)。這可能是因爲現在是上午5點,但我不明白爲什麼這不起作用。不是同一類型的複製品和貓嗎?
如果我嘗試用我自己的clone()方法覆蓋,我會得到相同的錯誤。我之前從來沒有使用過clone()(或者看過這個),所以我想在看到自己的想法之前先看看我不理解。對於它的價值,不過,我有以下以前註釋掉和編譯器扔上來就return語句:
protected Cat clone() {
Dog[] copy = new Dog[100];
int count = 0;
(while (count < cat.length) {
copy[count] = (Dog) cat[count];
count++;
}
return copy;
}
同類型不匹配錯誤。將頭文件更改爲「protected Dog [] clone()」會使編譯器錯誤消失,但很明顯,這並沒有讓我獲得任何地方的幫助。
感謝您的幫助!
你舉的例子是以某種方式誤導(貓和狗不會混在一起!);但是肯定的是'cat'是'Cat'的一個實例,而不是'Dog []'。 –