2012-11-28 94 views
0
class Animal { 

} 

class Horse extends Animal { 

} 

public class Test { 
    public static void main(){ 
     Animal a = new Horse();//mark1 
    } 
} 


Animal ah = new Horse();// reference type is Animal and object is Horse 

我不能完全理解此下面: 動物啊=新馬(); //引用類型是動物和物體是馬
我始終保持引用類型相同的同
我想知道使用未同參考type.Please告訴我一些情況,它是更適合使用它爲什麼是引用類型可以用Java從對象類型不同

+5

http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html – jrajav

+0

這是因爲,一匹馬「是一隻動物」。如果一個方法說「我需要一隻動物做我的工作」,並且你給它一匹馬,那麼你必須做正確的事情,因爲一匹馬「是一隻動物」。 –

回答

1

這適用於多個場合,如果你需要的動物的數組一個簡單的例子是。

public class Cow extends Animal { 
    public void sound() { 
     System.out.println("MOO"); 
    } 
} 

public class Horse extends Animal { 
    public void sound() { 
     System.out.println("HEEEHREHE"); 
    } 
} 

雖然動物,你可以不知道的事,所以你可以使用的財產以後像

public class Animal { 
    public void sound() { 
     System.out.println("."); 
    } 
} 

的事情是,如果你去通過量每一種動物的數組中會使用的方法爲它定義。

for (int i = 0; i < 3; i++) { 
    array[i].sound(); 
} 

將輸出:

HEEEHREHE 
MOO 
. 
+2

理想情況下,您將使'Animal'類(及其''聲音'函數)摘要。但是,那是另一天的話題。 :) – cHao

0

因此,你可以的原因對象使用任何Animal或Horse作爲'ab'類型。在這種特殊情況下,通過動物類型引用對象的實用性在於,在後期當您想要指向某個其他動物對象時,請指出Dog(實現動物接口),然後在其他代碼中您不會需要在其他動物類型的代碼中進行修改。因此,通過接口類型引用對象引用可以自由地動態更改實際實現實例,並且它也可以從外部世界隱藏實現類。

Animal array[] = new Animal[3]; 
array[0] = new Horse(); 
array[1] = new Cow(); 
array[2] = new Animal(); 

你可以有一些定義的通用方法,或讓他們在指定的每個擴展類:

0

除了能夠有一個程序執行期間的同一個變量是指不同類的對象,它往往是做,以保持編碼選項打開。

經典的例子是:

List<String> myList = new ArrayList<String>(); 

,編譯器將例如拒絕因爲ensureCapacity不是List方法,所以myList.ensureCapacity(100)。只有List方法可以用於myList。如果在程序運行並經過測量後發現使用LinkedList會使程序更快,只有構造函數調用發生變化。 myList沒有任何功能可以處理任何List。

相關問題