Trending News
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
是因為被覆寫了嗎?
請幫忙解答一下.
不太懂
Q4_1 q1 = new Q4_1();
Q4_1 q2 = new Q4_2();
的差異
設為Q4_1類別的物件不是指可使用該類別的提供的屬性方法嗎?
請大大幫個忙.. 因新手觀念還不太完整
還有一點 ,為什麼不能這樣用?
Q4_2 q2 = new Q4_1();
顯示如下的具體意義是?
incompatible types
found : Q4_1
required: Q4_2
Q4_2 q2 = new Q4_1();
^
2 Answers
- CKLv 41 decade agoFavorite 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