2012-11-05 22 views
1

類A:B不允許有一個默認的構造 - Java基礎

public class A {  

    private String firstName; 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

類:

public class B extends A{ 

    private int billNum; 

    B(String firstName, String billNum) { 
     super(firstName); 
     setBillNum(billNum); 

    } 

    public int getBillNumr() { 
     return billNum; 
    } 

    public void setBillNum(int billNum) { 
     this.billNum = billNum; 
    } 

1)現在我想添加一個默認構造像B() {},但我不能這樣做。爲什麼是這樣 ?

+2

你有什麼問題?如果你在'A-Class'中沒有任何'0-arg構造函數',那麼你是否爲了明確地調用'A類'的'1-arg constructor'而放置了一個'super'調用? –

回答

4

在子類構造函數中,你調用一個參數超類的構造函數,你沒有聲明。將A(String firstName) { this.firstName = firstName; }添加到超類。另外,在B.

+0

我添加了一個構造函數,它將1個參數傳遞給A類。現在,您希望我用'setFirstName(firstName);'替換'super(firstName);'當我嘗試這樣做時出現此錯誤隱式超級構造函數A()未定義。必須顯式調用另一個構造函數' –

+0

請注意關鍵詞「交替」。它意味着做一個**或**另一個,但不要同時做兩個。 –

9

您提供將無法編譯,代碼的建設者setFirstName(firstName);更換線super(firstName);由於這一行B:

super(firstName); 

這表明實際上,您A類有這樣一個構造函數:

public A(String firstName) { 
    this.firstName = firstName; 
} 

在這一點上,試圖在B宣佈一個新的構造沒有將失敗調用,因爲在A中沒有無參數構造函數。

那麼這將工作:

B() { 
    super("Anonymous"); 
} 

或者你可以一個參數的構造函數添加到:

A() { 
    this("Anonymous"); 
} 

......此時,你可以只是B.

使用 B() {}

基本上,一旦你明白沒有任何明確的構造函數this(...)super(...)呼叫等同於呼叫super()(即,超類中的無參數構造函數),這一切都是有道理的。

+0

祝賀500k。 – user

+0

@user:我還沒有......只有300多人去... –

1

首先,您沒有在類a中的構造函數,它將字符串作爲參數,並且您試圖從ur子類的構造函數中調用super(first name)。

class A{ 
String firstName; 
public aA(String firstname){ 
this.firstName= firstName; 
} 
}