[问题] 请问多型要如何执行父亲的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