[英]Java: Superclass and subclass
所有的狗也是動物嗎?
所有的動物也是狗嗎?
如果您需要動物,而我給您一條狗,那總是可以接受的嗎?
如果您特別需要狗,而我卻給您任何動物,那會不會有問題?
如果您需要可以駕駛的東西,但是只要它采用.Accelerate和.Steer之類的方法,就不必在意它是什么,您是否在乎保時捷還是救護車?
為了清楚起見,請考慮:
class A extends B implements C { }
其中A
是子類, B
是超類, C
是A
實現的接口。
子類可以向上轉換為任何超類。
B b = new A();
父類不能向下轉換為任何子類(這是不合理的,因為子類可能具有父類沒有的功能)。 您不能:
A a = new B(); // invalid!
可以將超類分配給適當類型的任何變量。
A q = new A(); // sure, any variable q or otherwise...
可以將一個類分配給其實現的接口之一的類型的變量。
C c = new A();
可以將子類變量強制轉換為其任何超類嗎?
是
可以為超類變量分配任何子類變量嗎?
是
可以給超類分配任何變量嗎?
是
如果是這樣,可以從任何實現類中為接口變量分配一個變量嗎?
是
是的,這通常是多態性的主要思想。
假設您有一些形狀:圓形,正方形,三角形。 您將擁有:
class Shape { ... }
class Circle extends Shape { ... }
class Square extends Shape { ... }
class Triangle extends Shape { ... }
繼承的思想是,圓是一個形狀。 因此,您可以執行以下操作:
Shape x = ...;
Point p = x.getCenterPosition();
您無需關心x
變量是哪種具體類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.