Java的this與super關鍵字

2021-07-09 11:26:16 字數 2686 閱讀 4083

一、

public

class father

public

void

set_a(int num)

public

static

void

main(string args)

}

在這裡,我們給father類寫了個構造方法。建立了乙個物件,並呼叫其set_a()方法為a賦值並列印賦值後的結果。

執行結果:

father:constructor

father:print a = 2

小結:

1.這段**裡,如果我們沒有寫這個father()構造方法的話,也會存在乙個預設的構造方法。

2.obj物件呼叫了set_a()方法為a賦值,注意這裡的this關鍵字,這個this的意思是本類的物件,即「自己」。我們可能會建立很多father類的物件,哪個物件呼叫set_a()方法,被賦值的a就是哪個物件的。如果把this去掉,在這裡執行結果是一樣的。

二、 新建乙個son類繼承father類:

public

class

sonextends

father

}

執行結果:

father:constructor

小結:

son子類並沒有寫構造方法,只有預設的構造方法。但是我們通過new建立son的物件的時候,是會呼叫父類的構造方法的。但是呼叫父類和子類的構造方法順序如何呢?

三、 將son類改動如下:

public

class

sonextends

father

public

static

void

main(string args)

}

執行結果:

father:constructor

son:constructor

小結:

可以看出new乙個son物件的時候,是會先呼叫父類的構造方法,再呼叫子類的構造方法。

四、 將父類改動如下:

public

class father

public

void

set_a(int num)

public

static

void

main(string args)

}

子類不變。

結果:

father類可以正常執行,輸出:

father:constructor

father:print a = 2

son類會報錯不能編譯執行。

小結:

son類報錯的原因是因為建立son物件時,需要呼叫父類的構造方法。但是父類的構造方法是有引數的。而我們在建立son物件的時候並沒有傳入引數。

但是注意,如果我們把son的main方法裡物件的建立就這麼加上引數,如son obj = new son(3);也是會報錯不能編譯執行的。

這個問題怎麼解決呢?

五、 可以用super關鍵字來解決。

子類改為:

public

class

sonextends

father

public

static

void

main(string args)

}

執行結果:

father:constructor

son:constructor

小結:

super()的意思是呼叫父類的構造方法。在這個例子裡,我們在子類的構造方法裡,用super()呼叫了父類的構造方法。因此解決了必須呼叫父類構造方法而又得帶引數的問題。

六、 再將子類改動如下:

public

class

sonextends

father

public

static

void

main(string args)

}

執行結果:

father:constructor

father:print a = 5

son:constructor

小結:

super.set_a(5)執行時,會呼叫father類的set_a()方法:

public

void

set_a(int num)

這裡,this.a被賦值為5, 但是哪個a被賦值為5了呢?

因為呼叫set_a()方法的是super,也就是father類。因此這裡的this指的就是預設構造的father物件。也就是這個father物件的a被賦值為5了。

注意:this和super不能用在static靜態方法中。假如我們在main方法裡寫一句this.set_a(5);或者super.set_a(5);是會報錯的。因為static方法是不依賴於具體物件的,而this和super是依賴具體物件的。

Super的使用, this 與super

super 關鍵字可在子類中訪問父類的方法,也可以訪問父類的屬性 其實和this關鍵字聯絡起來對比理解就明白了 乙個三層結構的例子 b繼承a,那麼在例項化b的時候,a和b哪個構造方法先執行呢?結果 先執行a的構造方法,然後才執行b的構造方法,因為有了父類才會有子類 在jvm的物理結構 在堆中 先構造...

java中的super與this關鍵字

1.this關鍵字 this指當前類的乙個物件的引用 是呼叫當前方法的那個物件的引用 this的用途 1 在方法中引用當前物件的屬性或者方法 2 在類的構造方法中呼叫過載的構造方法,this必須放在構造方法的第一行 super關鍵字 子類物件方法中父類物件的乙個引用 試用 1.在子類物件的方法中引用...

super和this的用法JAVA

繼承出現後,在 中的體現 重點在在於成員的體現 1,成員變數。重點明確原理。特殊情況 子父類中定義了一模一樣的成員變數。都存在於子類物件中。如何在子類中直接訪問同名的父類中的變數呢?通過關鍵字 super來完成。super和this的用法很相似。this 代表的是本類的物件的引用。super 代表的...