2010-03-03 111 views
23

這是面試中提出的問題。 如果一個類在java中有多個構造函數,什麼時候可以調用另一個構造函數,我們可以調用另一個構造函數嗎?在java中調用另一個構造函數

+0

你能澄清這個問題嗎?有多個構造函數可以創建不同的對象,並可以從其他類中調用。他們只是爲了這個目的而製造的。 – 2010-03-03 18:44:03

+4

他意味着從另一個調用構造函數。 – Woot4Moo 2010-03-03 18:45:51

+0

他問是否允許從另一個構造函數調用構造函數,或者每當一個類具有多個構造函數時,它是否允許調用構造函數 – Francis 2015-06-28 16:07:38

回答

36

你就可以了,我知道的語法是

this(< argument list >); 

您也可以撥打通過

super(< argument list >); 

父類的構造函數都這種調用只能作爲第一個語句來完成構造函數(所以你只能調用另一個構造函數,並且在其他任何事情完成之前)。

+6

10你不能做任何需要引用的東西。 – 2010-03-03 19:18:00

+0

它也必須在構造函數的第一行 – sixtyfootersdude 2010-07-11 00:51:11

+0

是的,第一行所以它將是第一個被實現的 – Francis 2015-06-28 16:05:38

6
this(other, args); 
+3

這可能是誤導或錯誤!其他是什麼?你只需使用'this(args-required-by-constructor)'或'super(args-required-by-constructor)來調用另一個構造函數;' – 2010-03-03 19:15:13

5

例如:

public class FileDb { 

    /** 
    * 
    */ 
    public FileDb() { 
    this(null); 
    } 

    public FileDb(String filename) { 
    // ... 
    } 

} 
9

是的,你可以做到這一點。

看一看在ArrayList實現,例如:

public ArrayList(int initialCapacity) { 
    super(); 
    if (initialCapacity < 0) 
     throw new IllegalArgumentException("Illegal Capacity: "+ 
              initialCapacity); 
    this.elementData = new Object[initialCapacity]; 
} 

/** 
* Constructs an empty list with an initial capacity of ten. 
*/ 
public ArrayList() { 
    this(10); 
} 

第二構造函數調用的第一個十的default capacity

9

沒有一個答案是完整的,所以我加入這個填空白。

您還可以從另外一個構造函數在同一個班級,或調用超類,有以下限制:

  1. 它必須是代碼中調用構造函數的第一行。
  2. 它不能有任何明確或隱含的引用this。所以你不能傳遞一個內部類(如果它引用了任何實例方法,那麼是匿名的),或者是一個非靜態方法調用的結果作爲參數。

(如其他人所說)的語法是:

MyClass() { 
    someInitialization(); 
} 

MyClass(String s) { 
    this(); 
    doSomethingWithS(s); 
} 
相關問題