2011-02-03 102 views
1
  1. 可以將子類變量轉換爲它的任何超類嗎?
  2. 超類變量可以分配任何子類變量嗎?
  3. 超類可以分配任何變量嗎?
  4. 如果是這樣,一個接口變量是否可以從任何實現類中分配一個變量?
+3

您應該明確區分變量和值的概念。現在,你的問題非常混亂。 – 2011-02-03 02:03:27

+0

您可能需要閱讀contra// covariance,因爲如果稍微改變問題,答案將會改變。你可以得到一個粗略的想法,它將是一個不同的答案通過閱讀這個:http://stackoverflow.com/questions/1184295/java-covariance-question – 2011-02-03 02:04:48

回答

7
  • 您可以在子類的實例分配的超可變
  • 咦?
  • 您可以在類的實例分配給任何接口類型的變量,這個類實現
+0

我認爲超類不能分配_any_變量,只是一種兼容類型。 – 2011-02-03 02:04:26

3

只是爲了清楚起見,可以考慮:

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(); 
    
0

能子類變量轉換爲超類的任何 ?

而且可以在超變量是 分配任何子類變量?

能超類被分配任何 變量?

如果是這樣,可以在接口變量是 分配來自任何 實現類變量?

10

是不是所有的狗也是動物嗎?

所有的動物也是狗嗎?

如果你需要一隻動物,並且我給你一隻狗,那總是可以接受的嗎?

如果你專門需要一隻狗,但我給你任何動物,會有問題嗎?

如果你需要一些東西你可以開車,但是你不關心它是什麼,只要它有像。加速和.Steer這樣的方法,你關心它是保時捷還是救護車?

0

是的,這通常是主要想法behing polymorphism

假設你有一些形狀:圓形,方形,三角形。你會有:

class Shape { ... } 

class Circle extends Shape { ... } 

class Square extends Shape { ... } 

class Triangle extends Shape { ... } 

繼承的想法是,一個圓是一個形狀。所以,你可以這樣做:

Shape x = ...; 
Point p = x.getCenterPosition(); 

你不需要關心其具體類型x變量。