我正在學習Java,我正在做這個練習,我不得不說說主要的方法打印什麼。其目標是更好地理解Java繼承。基本的Java繼承練習
interface X extends Remote{
A m(B bb) throws RemoteException;
}
class A implements Serializable{
int a;
A m(A aa){
aa.a = 3;
System.out.println("A.m");
return aa;
}
}
class B extends A{
int b;
A m(B bb){
bb.b = 7;
System.out.println("B.m");
return bb;
}
}
class C extends A implements X{
public B m(B bb){
if(bb.b == 7) bb.b = 9; else bb.b = 1;
System.out.println("C.m");
return bb;
}
}
現在我有我稱之爲一個主要方法:
X x = new C();
B b = new B();
(x.m(b)).m(b); // prints C.m() A.m()
我的主要方法,版畫「CM()上午()」的第三行,但我不明白爲什麼它打印Am()。 x.m(b)返回一個同時具有靜態和動態類型== B的對象;在這個對象上它被調用m(b)方法;那麼爲什麼它不被稱爲B類的m()方法?
我已經看到,B類中的m()方法不是A類中m()方法的重寫,因爲它們具有不同的顯式參數。
感謝在的B
一個實例,其延伸A
預先
我會避免將事物命名爲A,a,aa,m(A aa),a.m,aa.a.它只是使代碼更難閱讀。 – 2015-02-06 15:24:55
你是對的,我完全同意你的看法。這是一本書的練習,只是探索繼承。任何想法爲什麼它打印C.m()A.m()而不是C.m()B.m()如我所想?感謝m8 – 2015-02-06 15:33:32