一、
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 代表的...