首頁 / CompScience / Programming / Languages / java / 物件繼承和物件變數參考轉型的關係

物件繼承和物件變數參考轉型的關係

package variables_methods.snippets;

/**
*
* @author stephen.liu
*/
abstract class A {
abstract void a1();
void a2(){}
}

class B extends A {
void a1(){}
void a2(){}
}

class C extends B {void c1(){}}

public class Polymorphic {
public static void main(String[] args) {
A x = new B(); C y = new C();A z = new C();

}
}
what are four valid examples of polymorphic method calls?(Choose four.)
A.x.a2();
B.z.a2();
C.z.c1();
D.z.a1();
E.y.c1();
F.x.a1();

徹底征服SCJP 6 認證這本課本答案是ABDF,

但是我用netbeans撰寫的時候是E.y.c1();是對的,F.x.a1()是錯的!

而且它的解釋是這樣。以程式方面來看y.c1()是正確的呼叫方式,型別C類別的y變數只像C類別物件實體,呼叫C類別所實作的c1()函式,這是非常正確的呼叫作法,但選項E為何是錯的呢?因為此選項是錯再沒有用到多型的用法。這選項是個陷阱。

如果說沒用到多型用法而錯,那也應該是ABD是對的而已吧!因為F語法本身就有錯!
所以煩請高手代為解惑,謝謝!

今天(11/11)看到有人回覆說沒問題,我就再確認一次,真是詭異沒問題了,看來我有眼花的毛病了!

Print Friendly, PDF & Email
馬上成為工作達人的Fans

About ㄚ琪

工作達人Fun Taiwan的創辦者及總編,可以在這裡更認識他。

One comment

發表迴響

你的電子郵件位址並不會被公開。 Required fields are marked *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

Scroll To Top