作者H45 (!H45)
站内java
标题Re: [问题] 一个多形的问题
时间Wed May 7 07:59:16 2008
※ 引述《AI3767 (AI3767)》之铭言:
: ※ 引述《upo (来呀)》之铭言:
: : 4. Given the following Java code: [10 points]
: : 10. interface A { public int getValue();}
: : 11. class B implements A {
: : 12. public int getValue() { return 1;}
: : 13. }
: : 14. class C extends B {
: : 15. // insert code here16. }
: : What three code fragments individually at line 15, make used of polymorphism?
: : (Choose three)
: : (A) public void add (C c) {c.getValue();}
: : (B) public void add (B b) {b.getValue();}
: : (C) public void add (A a) {a.getValue();}
: : (D) public void add (A a, B b) {a.getValue();}
: : (E) public void add (C c1, C c2) {c1.getValue();}
: : (E) public void add (C c1, C c2) {c1.getValue();}
: : ANS:__ (B), (C), (D)__
: : 推 AI3767:真糟糕>< 我还以为是abe... 我得加强一下观念了(泪) 05/04 22:59
: : 推 H45:直观啊,参数型态没有 C 的就是 BCD 05/05 00:22
: : 推 silver8250:因为只有 BCD 可以在 runtime 时期决定parameter型别 05/05 22:59
: : 推 scarsnight:因为C没有实作getValue() interface,是由其父类别实作 05/06 16:20
: 我还在混乱中 Orz
: C 没有实作但继承 B, 所以在 (E) 中其实是用了 B 的吧
: (SCJP Java5 2.2)
: B 实作了, 但是 (B) 使用的也算是自己的method
: 若要说 (B) 的code, 算是 A 的多型利用,
: 那 (E) 的 code 应该也算是啊?
: 总觉得 B 算是多型利用的话, C也算是耶 @@a
: 至少... C 继承自B, 在使用 getValue() 时, 就算是多型存取
: 所以 (A) (E) 不该被排除吧?
"Polymorphism is a programming language feature that allows values of
different data types to be handled using a uniform interface."
- Wikipedia.org
「多型是一个允许您用不同的资料型态的数值来处理一个相同介面的程式语言功能。」
在此例题中,B 继承自 A,而 C 继承自 B。
这样子的继承树虽然难见其多型的效果,但是 A 和 B 相对於 C 仍然都是相同的介面。
考虑还有另一个 D 继承自 B,再另一个 E 继承自 A,那麽 C 和 D 的相同介面是 A
和 B;C 和 D 和 E 的相同介面则是 A。
回到原题,这是考我们知不知道哪一个方法的参数型态具有多型的利用。
请仔细思考多型的定义:用不同的资料型态的数值来处理一个相同介面
所谓的数值就是 instance,而所谓的相同介面其实就是指 type
因此,符合相同介面的答案,就只有那些没有 C 型态的参数串
而这些参数在执行期会是什麽 instance 则不一定。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:推 AI3767:了解,所以若题目多一个继承自C的F时,答案就是(A)~(E)了? 05/07 12:08
2F:→ H45:心中 OS: 题目不会这样出...... 05/07 17:08