作者aoksc (重出江湖)
看板java
標題[問題] 請問建構時期呼叫方法的問題
時間Fri Sep 30 21:38:48 2011
http://pastie.org/2616984
程式碼如上
請問一下
當我執行new B()的時候當我執行AA父類別建構子中fun1()方法的時候
本來我預期是會出現 A::fun1()==> a=10000
結果出現的是
B::fun1()==> a=0
B::fun1()==> b=0
B::fun1()==> c=20
請問以結果來說的話
我可以說是因為多型的關係
所以我雖然是在執行父類別的建構子
但其呼叫的同名方法還是會呼叫到子類別的fun1()方法
請問這樣敘述正確嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.138.239
1F:推 LaPass:前面有人問過怎麼在外部叫用super方法,結果是不行。 09/30 21:49
2F:→ LaPass:那時候就覺得...Java的override差不多是把舊的方法取代掉了 09/30 21:51
3F:→ aoksc:我問的不是super的問題耶= = 09/30 21:52
4F:推 LaPass:是override的問題.... 09/30 21:55
應該是跟多型無關
剛試著把obj=new BB();
改成BB XX=new BB();
結果還是一樣
應該說即便是在父類別的的建構子呼叫方法
子父類別有同名方法的話
會自動override父類別的方法
這樣敘述不知道正不正確?
※ 編輯: aoksc 來自: 124.8.138.239 (09/30 22:08)
5F:推 LaPass:先不管是不是在建構子內.... 只要你叫有override的Mothod, 09/30 22:34
6F:→ LaPass:沒用super.XXX()去叫,就是叫用最底層的Method。 09/30 22:36
7F:推 lachtchlee:說法正確 動態綁定 在 constructor()中調用其它方法宜 09/30 22:52
8F:→ lachtchlee:慎 語法正確 但有時卻會造成事實上的不合理 09/30 22:55
9F:→ lachtchlee:原po敘述正確 09/30 22:57
10F:→ lachtchlee:本來想叫爸爸不要打牌 卻變成兒子不要打電動 09/30 23:02
11F:推 lachtchlee:會自動調用子類中覆蓋掉父類的同名的方法 09/30 23:30
12F:推 lovdkkkk:看怎麼想 如果意思是是叫人專心吃飯 父子兩個不同很合理 10/01 01:38
13F:→ lovdkkkk:然後如果是 static 的方法結果可能不同 10/01 01:39