From Gossip@caterpillar

Java Gossip: 預設建構子

當您在Java中定義一個類別,但沒有定義建構子時,編譯器會自動幫您產生一個預設建構子,也就是說,如果您這麼寫:
public class Test {

    ....
}

則編譯器會自動加上預設建構子,也就是相當於這麼寫:
public class Test {
    public Test() {
    }
    ....
}

如果您自行定義建構子,則編譯器就不會幫您加上預設建構子,所以當您這麼定義時:
public class Test {
    public Test(int i) {
        ...
    }
    ....
}

則在建構時,就必須指明使用哪個建構子,簡單的說,您就不能使用以下的方式來建構:
Test test = new Test();

有時會建議即使沒有用到,在定義自己的建構子的同時,也加上個沒有參數的建構子,例如:
public class Test {
    public Test() {
    }

    public Test(int i) {
        ...
    }
    ....
}

另外要注意的是,在繼承時,如果您沒有使用super()指定要使用父類別的哪個建構子,則預設會尋找無參數的建構子。

預設建構子的存取權限是跟隨著類別的存取權限,例如:
public class Test {
}

以上的預設建構子存取權限為public。如果是以下的話:
class Test {
}

則預設建構子存取權限為default