作者benson101 (benson)
看板java
标题[问题] 请问多型要如何执行父亲的method?
时间Thu May 12 12:10:10 2016
假如 B Extends A (A,B 都有定义method F)
今宣告:
A a = new B();
请问要如何让 a.F()执行的是A的F() 而不是B的F()??
感恩~~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.194.134.136
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1463026212.A.BAC.html
1F:推 icydream: A a = new A(); 05/12 12:24
2F:→ bachelorwhc: 1. 这不是多型 05/12 12:43
3F:→ bachelorwhc: 2. A.F() 05/12 12:44
4F:→ ssccg: 不行,B把A的method override掉之後,你就不可能在B的 05/12 13:10
5F:→ ssccg: instance上呼叫A的实作,除了在B里面用super以外 05/12 13:10
6F:→ ssccg: 有些语言(C++,C#)会分要virtual method才会被override 05/12 13:20
7F:→ ssccg: Java没有分,叫到哪个只看instance不看reference 05/12 13:23
8F:→ gpctv: 改method的名字就好啦!!! 05/12 14:36
9F:→ gpctv: 不然就像一楼那样新增一个Class !!! 05/12 14:36
10F:→ gpctv: 不晓得原po是想问观念还是写程式遇到的问题 05/12 14:37
11F:→ benson101: 是想厘清观念 再请教一下 如果A,B都有宣告成员变数X 05/12 17:00
12F:→ benson101: 那a.X是access到A的X还是B的X?谢谢! 05/12 17:02
13F:→ NobleDino: 任何重复执行子类别 05/12 21:06
14F:→ NobleDino: 多型的意义是,同样的方法,子类别会自动做对的事 05/12 21:08
15F:推 icydream: 是A的X,field member没有多型 05/12 21:53
16F:推 eric781101: (A) a.F() 记得可以cast成A 05/13 05:34
17F:推 csieflyman: 最近看书学到 java的方法呼叫: non-virtual方法 例如 05/13 14:17
18F:→ csieflyman: static方法 private方法 new物件的constructor方法 f 05/13 14:17
19F:→ csieflyman: inal 方法及容易搞混的方法overloading 都是在编译期 05/13 14:17
20F:→ csieflyman: 就能知道要且决定要呼叫那一个方法 储存在bytecode里 05/13 14:17
21F:→ csieflyman: 然後JVM照着执行 然而多型的 overriding 是执行期才 05/13 14:17
22F:→ csieflyman: 能知道物件的具体型别 查询 virtual method table 决 05/13 14:17
23F:→ csieflyman: 定要呼叫那个方法 至於直接存取类别栏位根本不是方法 05/13 14:17
24F:→ csieflyman: 呼叫 所以与多型无关 05/13 14:17