更新時間:2020-07-22 15:42:50 來源:動力節點 瀏覽2973次
class?Base{
????int?x?=?1;
????static?int?y?=?2;
????String?name(){
????????return?"mother";
????}
????static?String?staticname(){
????????return?"static?mother";
????}
}
class?Subclass?extends?Base{
????int?x?=?4;
????int?y?=?5;
????String?name(){
????????return?"baby";
????}
????static?String?staticname(){
????????return?"static?baby";
????}
}
public?class?Test02{
????public?static?void?main(String[]?args){
????????Subclass?s?=?new?Subclass();
????????System.out.println(s.x+"?"+s.y+"?"+s.name()+"?"+s.staticname());
????????Base?s1?=?s;
????????System.out.println(s1.x+"?"+s1.y+"?"+s1.name()+"?"+s1.staticname());
???}
}?
/*
結果:
4 5 baby static baby
1 2 baby static mother
結論:
父類的實例方法被子類的同名實例方法覆蓋
父類的靜態方法被子類的同名靜態方法隱藏
父類的實例變量和類變量可以被子類的實例變量和類變量隱藏
就"Base s1=s"來說:把s賦值給s1時,s(子類)的方法name已經把父類的name方法覆蓋了,卻沒有覆蓋static name,而是隱藏了它。
賦值給s1后,s1的name方法已經變成了"baby",而staticname方法只是被隱藏而沒有被覆蓋,現在有還原成了"static mother"
*/
以上就是動力節點java培訓機構的小編針對“Java子類與父類方法的隱藏和覆蓋”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習