2012-08-12 77 views
2

我是Java的新手,所以我可能在這裏錯過了一些東西 - 我在其他線程中四處看了一下,但是我沒有發現任何與我的問題非常相似的東西。我知道私有變量不是由子類繼承的。這個問題,我有,爲什麼超();在我的子構造函數中識別我的基構造函數中的字段?它是父類的構造函數是公共的嗎?並且即使它傳遞的變量是私有的,子構造函數也會識別它們並將它們傳遞給它們。任何澄清將不勝感激。私有變量和繼承構造函數

父類:

public abstract class BaseQuestion { 

private String questions; 
private float totalAttempts; 
private float averageTime; 
private float percentCorrect; 

public BaseQuestion(String questions, float totalAttempts, float averageTime, float percentCorrect){ 
    this.questions = questions; 
    this.totalAttempts = totalAttempts; 
    this.averageTime = averageTime; 
    this.percentCorrect = percentCorrect; 
} 

子類:

public class TrueFalseQuestion extends BaseQuestion{ 
public static int questionsCreated; 


public TrueFalseQuestion(String question, float totalAttempts, float averageTime, float percentCorrect){ 
    super(question, totalAttempts, averageTime, percentCorrect); 

} 

編譯器給了我上述任何錯誤,它混淆了我有點...

謝謝

+0

您在調用super()時沒有引用基類的私有變量。您正在重新獲得派生類的構造函數的參數。參數和實例變量是不同的並且不相交。 – 2012-08-12 23:58:28

回答

1
super(question, totalAttempts, averageTime, percentCorrect); 

在th是一行代碼,所有的變量名都引用你的子類中的參數。它們的值傳遞給基類構造函數,然後將它們分配給私有變量。混淆可能是因爲參數和私有變量具有相同的名稱。但是,你必須小心你指的是哪一個。這是施工人員的常見做法。

3

子類中的構造函數沒有「識別」超類中的字段,它接收到一些與超類中的屬性碰巧名稱相同的參數,但它們原則上不同。他們被分配到超類的字段,因爲你調用super()來訪問超類的構造函數,就這些。