這篇文章主要介紹了Java構造器使用方法及注意事項的相關資料,這裡舉例說明如何使用構造器及需要注意的地方,需要的朋友可以參考下
Java建構器使用方法及注意事項
超類別的建構器在子類別的建構器運行之前運行,也就是說,在建立物件時,先運行超類別中的建構器,然後再運行子類別中的建構器,此時,如果在執行超類別建構器的時候,建構器執行了可覆寫的方法,那麼就會去呼叫子類別中的該方法,而此時子類別還未被實例化,此時就有可能出問題。
以一個例子說明:
public class Super { int age = 10; protected void say() { System.out.println("super"); } public Super() { override(); } public void override() { System.out.println("super override"); } } class Sub extends Super { int age = 9; private final Date date; public Sub() { date = new Date(); } @Override public void override() { System.out.println(date); } @Override protected void say() { System.out.println("sub"); } public static void main(String[] args) { Super sub = new Sub(); sub.override(); // sub.say(); // System.out.println(sub.age); } }
建立兩個類,一個Super.java,其中定義一個成員變數age= 10,並且在構造器中呼叫了override() 方法。 Sub.java 繼承了 Super.java,並且在建構方法中初始化了 date。
現在我們執行 main 方法,控制台會印出什麼呢? 是一個 date? 還是兩個 date? 答案是先印出 null,然後再印出具體的 date 值。而如果在 Sub.java 的 override 方法中呼叫 date 的任意方法時,會出現 NPE
為什麼會這樣呢?
我們知道在使用new 來建立物件的時候,會先檢查該類別是否繼承自父類,如果是,則會先呼叫父類別的建構方法,該案例中,在new Sub() 時,發現Sub 是Super 的子類,於是先呼叫Super 的建構方法,在Super 構造方法中,發現呼叫了override 方法,於是又去找子類Sub 是否重寫了override 方法,發現該子類別重寫了,則呼叫子類別的override,列印出date,而此時date 還未被初始化,所以值為null。
在父類別的建構方法執行完畢後,再執行子類別的建構方法,此時 date 被初始化了,所以再次呼叫 override 方法時,則會正確列印出 date。
當呼叫 sub.age,會印出什麼?是 10 還是 9 ?
其實是列印出10,建立物件的時候,實例變數有兩種類型,前面是宣告類型,後面是實際類型
Super sub = new Sub();
sub 的宣告類型為Super,實際類型為Sub。
當呼叫成員變數的時候,會先在宣告型別中尋找該變數,如果該變數存在,則使用宣告型別中的變數值,如果不存在,則在實際型別中去尋找該變數。
而呼叫方法的話,優先在子類別中尋找對應方法,如果子類別中不存在,再呼叫父類別中方法。
以上是Java中關於構造器的使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境