2010-08-17 199 views
3

子類構造函數類如何中和父構造函數?Java:如何可以子類構造函數類中和父構造函數?

我的意思是在Child構造函數中我們必須使用super() - 是否有創建父對象的方法存在?

例超:

class abstract Parent{ 
    protected String name; 
    public Parent(String name){ 
    this.name=name; 
    } 
} 

class Child extends Parent{ 
    public Child(String name,int count){ 
    super(name); 
    }  
} 

回答

1

您擴展父對象,當你初始化孩子被初始化。那麼作爲要求初始化的要求,父母需要一個名字。這隻能在子對象的初始化中給出。

因此,要回答你的問題,沒有

1

爲什麼你會被繼承的東西,但不是構建呢?如果你的代碼需要,那可能是因爲糟糕的設計。 Java確實需要你調用父類的構造函數。

+0

它的方法在編寫測試時可能很有用。 – xdhmoore 2018-01-16 19:33:44

+0

@xdhmoore謹慎闡述?我認爲需要模擬超類的構造函數的測試可能表明設計存在問題。 – 2018-01-17 00:30:17

+0

昨天我正在更新一些單元測試,其中有一個數據庫連接正在通過Mockito進行間諜操作的類的構造函數中進行。在測試過程中,它正在拋出一個異常(並且記錄併吞下它)。我在想,如果不調用父類,重寫此構造函數會很好。我最終創建了一個具有不同簽名的子類構造函數。我實際上得到了一些反饋,認爲這是一個糟糕的解決方案,但這正是我想到的情況。 – xdhmoore 2018-01-17 21:48:55

3

「父母」和「孩子」在這裏不合適。一個孩子不是一種父母(我當然希望我的孩子至少還沒有十年,但那是另一回事)。

考慮使用不同的名稱相同的代碼:

class abstract Animal{ 
protected String name; 
public Animal(String name){ 
this.name=name; 
} 
} 

class Elephant extends Animal{ 
public Elephant(String name,int count){ 
    super(name); 
} 

} 

現在,你怎麼能有大象,是不是動物?

+0

你不能。通過宣佈「擴展動物」作爲大象班的一部分,你已經劃分了大象。所有的大象都是動物。 – 2011-12-10 23:04:36

+1

@Joshua:實際上,Elephant是子類(如在名詞中)。它將動物(如在動詞中)劃分爲子類。 – BoltClock 2011-12-11 14:01:52

1

子類可以通過super.ParentClassVariable = thingToBeChanged更改父構造方法中的對象指向的內容:

class Parent 
{ 
    BufferedReader inKeyboard; 
    public Parent() 
    { 
     inKeyboard = new BufferedReader (new InputStreamReader(System.in)); 
    } 
} 

class Child extends Parent 
{ 
    public Child() 
    { 
     super.inKeyboard = new BufferedReader(new FileReader(filename)); 
    }//changes the pointer in the parent object to point to a different reader 
} 

現在,當你做出一個子對象,而不必在父用...(System.in)作爲輸入,在家長的方法將使用...(文件名)

相關問題