Java的默認構造函數調用


// 注意,這里不能是 public class OOO,否則編譯無法通過,需把文件命名成 OOO.java
class OOO {
    // 注意:如果不定義OOO(),那么Shapes(int i)編譯出錯    OOO() {
        System.out.println(" Construtor() in OOO"); 
    }
    OOO(int i) {
        // this(); // 可以這樣調用!
        System.out.println(" Construtor(i) in OOO"); 
    }
}

public class Shapes extends OOO{

    Shapes() {
        super(200); // 必須放在第一行,否則出錯。
        // 調用super(200)以后,不再默認調用super()了,否則會自動調用super() // 原因:構造函數通常用於完成一些初始化的工作,比方說類B繼承了類A,類A中有一個name屬性,在類A的構造函數中name 被初始化,如果在類B構造函數中我們沒有先調用父類A的構造函數而先使用了未初始化的資源name,將不能得到我們期望的結果,所以人們就會有了這種約定。
        System.out.println(" Construtor() in Shapes"); 
    }

    Shapes(int i) {
        // 還是會默認調用super()
        System.out.println(" Construtor(int) in Shapes"); 
    }

    public static void main(String[] args) {
        // 例子1:
        System.out.println("==================ex1==================");
        Shapes s1 = new Shapes();

        // 例子2:
        System.out.println("==================ex2==================");
        Shapes s2 = new Shapes(100);
    }
} 

另外有一篇:java構造函數的執行順序

http://www.blogjava.net/rocket/archive/2008/05/27/203165.html

若創建一個沒有構造函數的類,則編譯程序會幫我們自動創建一個默認構造函數。
如果已經定義了一個構造函數(無論是否有自變量),編譯程序都不會幫我們自動合成一個:
class Bush {
Bush(int i) {}
Bush(double d) {}
}

現在,假若使用下述代碼:
new Bush();
編譯程序就會報告自己找不到一個相符的構造函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM