看板 java 關於我們 聯絡資訊
假如 B Extends A (A,B 都有定義method F) 今宣告: A a = new B(); 請問要如何讓 a.F()執行的是A的F() 而不是B的F()?? 感恩~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.134.136 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1463026212.A.BAC.html
icydream: A a = new A(); 05/12 12:24
bachelorwhc: 1. 這不是多型 05/12 12:43
bachelorwhc: 2. A.F() 05/12 12:44
ssccg: 不行,B把A的method override掉之後,你就不可能在B的 05/12 13:10
ssccg: instance上呼叫A的實作,除了在B裡面用super以外 05/12 13:10
ssccg: 有些語言(C++,C#)會分要virtual method才會被override 05/12 13:20
ssccg: Java沒有分,叫到哪個只看instance不看reference 05/12 13:23
gpctv: 改method的名字就好啦!!! 05/12 14:36
gpctv: 不然就像一樓那樣新增一個Class !!! 05/12 14:36
gpctv: 不曉得原po是想問觀念還是寫程式遇到的問題 05/12 14:37
benson101: 是想釐清觀念 再請教一下 如果A,B都有宣告成員變數X 05/12 17:00
benson101: 那a.X是access到A的X還是B的X?謝謝! 05/12 17:02
NobleDino: 任何重複執行子類別 05/12 21:06
NobleDino: 多型的意義是,同樣的方法,子類別會自動做對的事 05/12 21:08
icydream: 是A的X,field member沒有多型 05/12 21:53
eric781101: (A) a.F() 記得可以cast成A 05/13 05:34
csieflyman: 最近看書學到 java的方法呼叫: non-virtual方法 例如 05/13 14:17
csieflyman: static方法 private方法 new物件的constructor方法 f 05/13 14:17
csieflyman: inal 方法及容易搞混的方法overloading 都是在編譯期 05/13 14:17
csieflyman: 就能知道要且決定要呼叫那一個方法 儲存在bytecode裡 05/13 14:17
csieflyman: 然後JVM照著執行 然而多型的 overriding 是執行期才 05/13 14:17
csieflyman: 能知道物件的具體型別 查詢 virtual method table 決 05/13 14:17
csieflyman: 定要呼叫那個方法 至於直接存取類別欄位根本不是方法 05/13 14:17
csieflyman: 呼叫 所以與多型無關 05/13 14:17