java 基本物件問題

程式碼如下

public class Q4_1

{

public void method(int i)

{

System.out.println(10);

}

}

public class Q4_2 extends Q4_1

{

public static void main(String argv[])

{

Q4_1 q1 = new Q4_1();

Q4_2 q2 = new Q4_2();

q1.method(1);

q2.method(2);

}

public void method(int k)

{

System.out.println(20);

}

}

此時印出為

10

20

將Q4_2 q2 = new Q4_2();改為Q4_1 q2 = new Q4_2();

為何輸出還是一樣呢?

將q2.method(2); 改為 ((Q4_1)q2).method(2);

輸出還是

10

20

是因為被覆寫了嗎?

請幫忙解答一下.

Update:

不太懂

Q4_1 q1 = new Q4_1();

Q4_1 q2 = new Q4_2();

的差異

設為Q4_1類別的物件不是指可使用該類別的提供的屬性方法嗎?

請大大幫個忙.. 因新手觀念還不太完整

Update 2:

還有一點 ,為什麼不能這樣用?

Q4_2 q2 = new Q4_1();

顯示如下的具體意義是?

incompatible types

found : Q4_1

required: Q4_2

Q4_2 q2 = new Q4_1();

^

2 Answers

Rating
  • CK
    Lv 4
    1 decade ago
    Favorite Answer

    這是繼承的觀念

    >> 不太懂

    >> Q4_1 q1 = new Q4_1();

    >> Q4_1 q2 = new Q4_2();

    >> 的差異

    Q4_1 是 Q4_2 的老子, 當然不一樣

    但你可以說他們都是同 "姓" 同一家出品

    Q4_1 q2 = new Q4_2();

    本質上是 Q4_1 還是 Q4_2? 當然是後者

    因此所呼叫的是 Q4_2 裡的函式

    但如果 Q4_1 裡有一函式 method2 而 Q4_2 並未改寫, q2.method2() 就會使用 Q4_1 裡的定義

    兒子沒錢當然向父親要囉! 這就是繼承的基本觀念

    Source(s): me
  • 1 decade ago

    是 overriding 的緣故~~~

    如果你想看清楚 java 呼叫了那些 classes...

    可以用: java -verbose Q4-2

    Source(s): me
Still have questions? Get your answers by asking now.