1 回答

TA貢獻1712條經驗 獲得超3個贊
可視化這一點的最簡單方法是認為繼承就像父/子關系。你可以有父 -> 子 -> 孫子等。
當你有:
class A {}
class B extends A{}
class C extends B{}
C就像一個孫子A。這意味著C繼承了所有的方法B,包括那些B本身繼承自A.
In OOP words,C **is**A` 的方法。
但是,當你有
class A {}
class B extends A{}
class C extends A{}
C和B是兄弟類,這意味著它們都繼承了A的方法,但它們彼此不兼容。
在第一種情況下,這些是有效的:
C c = new C();
c.methodFromA(); //C inherits methods from A by being its grand-child
c.methodFromB(); //C inherits methods from B by being its child
c.methodFromC();
然而,在第二種情況下,當兩者都B直接C extends A:
C c = new C();
B b = new B();
c.methodFromA(); //C inherits methods from A by being its child
b.methodFromA(); //B inherits methods from A by being its child
c.methodFromB(); //not allowed
b.methodFromC(); //not allowed
B但是,和之間沒有直接關系C。這些是無效的:
B b = new B();
C c = new C();
b = (B) c; //invalid, won't compile
A b = b;
c = (C) b; //will compile, but cause a ClassCastException at runtime
添加回答
舉報