2017-09-22 218 views
0

如果我使用的是一個名爲「Dog」的類,它擴展了一個名爲「Animal」的類,有沒有辦法讓構造函數使用一個帶有Animal對象的參數,然後會要求我不要使用超級關鍵字來存儲Animal對象所需的信息?謝謝。Java繼承/構造函數

回答

0

不,因爲您想複製原始Animal。這是因爲DogAnimal,您不能傳入另一個Animal並將其作爲新對象的「父」。

你應該這樣做的方式是在你的父類(動物)中創建一個複製構造函數,該構造函數接受相同類型的對象。

public Animal(Animal other) { 
    this.field1 = other.field1; 
    this.field2 = other.field2; 
    ... 
} 

然後在您的Dog類,你可以這樣做:

public Dog(Dog other) { 
    super(other); 
    this.breed = other.breed; 
    ... 
} 
+0

感謝您的信息! – Cresyls

+0

很高興我幫助了!如果這是答案,隨時標記爲:) – ACVM

0

不能自動,沒有。

現在Animal本身可能有(用戶創建)「拷貝構造函數」風格的構造函數的Animal實例,並從中複製領域,你可以在Animal對象傳遞給此構造函數做你想做的。

0

如果我使用的是所謂的 「狗」 類

class Dog { 
} 

和它擴展了一個名爲 「動物」 類

class Animal { 
} 
class Dog extends Animal { 
} 

是有方式有建設者

class Dog extends Animal { 
    Dog() { 
    } 
} 

時使用的參數是需要一個Animal對象

class Dog extends Animal { 
    Dog(Animal otherAnimal) { 
    } 
} 

,然後要求我不要用super關鍵字

↑↑↑↑沒有使用super關鍵字以上代碼↑↑↑↑

要存儲一個Animal對象所需的信息嗎?

class Dog extends Animal { 
    Animal otherAnimal; 
    Dog(Animal otherAnimal) { 
     this.otherAnimal = otherAnimal; 
    } 
} 

信息存儲,仍然沒有使用super關鍵字。

+0

不是我的意思,但感謝張貼 – Cresyls

+1

@Cresyls這完全回答你的問題,其錯誤是,這不是你的意思? – Oleg

+0

@Oleg我知道這是我的錯,因爲沒有正確解釋它,它可能會在技術上回答我的問題,但它不會在同一時間 – Cresyls