簡體   English   中英

Java:超類和子類

[英]Java: Superclass and subclass

  1. 可以將子類變量強制轉換為其任何超類嗎?
  2. 可以為超類變量分配任何子類變量嗎?
  3. 可以給超類分配任何變量嗎?
  4. 如果是這樣,可以從任何實現類中為接口變量分配一個變量嗎?

所有的狗也是動物嗎?

所有的動物也是狗嗎?

如果您需要動物,而我給您一條狗,那總是可以接受的嗎?

如果您特別需要狗,而我卻給您任何動物,那會不會有問題?

如果您需要可以駕駛的東西,但是只要它采用.Accelerate和.Steer之類的方法,就不必在意它是什么,您是否在乎保時捷還是救護車?

  • 您可以將子類實例分配給超類變量
  • ??
  • 您可以將類的實例分配給該類實現的任何接口類型的變量

為了清楚起見,請考慮:

class A extends B implements C {  }

其中A是子類, B是超類, CA實現的接口。

  1. 子類可以向上轉換為任何超類。

     B b = new A(); 
  2. 父類不能向下轉換為任何子類(這是不合理的,因為子類可能具有父類沒有的功能)。 您不能:

     A a = new B(); // invalid! 
  3. 可以將超類分配給適當類型的任何變量。

     A q = new A(); // sure, any variable q or otherwise... 
  4. 可以將一個類分配給其實現的接口之一的類型的變量。

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM