搜尋
首頁Javajava教程Java中關於構造器的使用詳解

Java中關於構造器的使用詳解

Jul 30, 2017 am 10:25 AM
java使用詳解

這篇文章主要介紹了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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

mPDF

mPDF

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

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境