[問題] 請問多型要如何執行父親的method?

作者: benson101 (benson)   2016-05-12 12:10:10
假如 B Extends A (A,B 都有定義method F)
今宣告:
A a = new B();
請問要如何讓 a.F()執行的是A的F() 而不是B的F()??
感恩~~
作者: icydream (巧虎)   2016-05-12 12:24:00
A a = new A();
作者: bachelorwhc (單身老王)   2016-05-12 12:43:00
1. 這不是多型2. A.F()
作者: ssccg (23)   2016-05-12 13:10:00
不行,B把A的method override掉之後,你就不可能在B的instance上呼叫A的實作,除了在B裡面用super以外有些語言(C++,C#)會分要virtual method才會被overrideJava沒有分,叫到哪個只看instance不看reference
作者: gpctv (gpctv)   2016-05-12 14:36:00
改method的名字就好啦!!!不然就像一樓那樣新增一個Class !!!不曉得原po是想問觀念還是寫程式遇到的問題
作者: benson101 (benson)   2016-05-12 17:00:00
是想釐清觀念 再請教一下 如果A,B都有宣告成員變數X那a.X是access到A的X還是B的X?謝謝!
作者: NobleDino (高貴恐龍)   2016-05-12 21:06:00
任何重複執行子類別多型的意義是,同樣的方法,子類別會自動做對的事
作者: icydream (巧虎)   2016-05-12 21:53:00
是A的X,field member沒有多型
作者: eric781101   2016-05-13 05:34:00
(A) a.F() 記得可以cast成A
作者: csieflyman (風之驕子)   2016-05-13 14:17:00
最近看書學到 java的方法呼叫: non-virtual方法 例如static方法 private方法 new物件的constructor方法 final 方法及容易搞混的方法overloading 都是在編譯期就能知道要且決定要呼叫那一個方法 儲存在bytecode裡然後JVM照著執行 然而多型的 overriding 是執行期才能知道物件的具體型別 查詢 virtual method table 決定要呼叫那個方法 至於直接存取類別欄位根本不是方法呼叫 所以與多型無關

Links booklink

Contact Us: admin [ a t ] ucptt.com