Re: [問題] 一個多形的問題
※ 引述《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
推
05/07 12:08, , 1F
05/07 12:08, 1F
→
05/07 17:08, , 2F
05/07 17:08, 2F
討論串 (同標題文章)