這個實際不叫鑄造這是一個多態性的例子。它允許變量根據與其他類的繼承關係採用不同的類型。
例如,假設您正在編寫程序來模擬動物園。你將有一個名爲Zoo
的班級和一個名爲Animal
的班級。還有幾個類別從Animal
類延伸:Lion
,Zebra
和Elephant
。
這將是非常有用的,以保持所有這些對象在一個列表中組合在一起的,但因爲它們是不同類型的,即:Lion
,Zebra
和Elephant
,你不能把它們存儲在一個單獨的列表,你將不得不保持一個單獨的名單每個類型的動物。這是多態性發揮作用的地方。
由於每個班Lion
,Zebra
,並Elephant
全部來自Animal
類,我們可以簡單地將它們存儲在Animal
類型的列表擴展。
代碼示例:
public class Zoo
{
private List<Animal> animals;
public Zoo()
{
this.animals = new ArrayList<>();
}
//notice this method takes an Animal object as a parameter
public void add(Animal a)
{
this.animals.add(a);
}
}
public abstract class Animal
{
private String name;
private String type;
public Animal(String name, String type)
{
this.name = name;
this.type = type;
}
//all subclasses must implement this method
public abstract void speak();
}
public class Lion extends Animal
{
private String animalType = "Lion";
public Lion(String name)
{
super(name, animalType);
}
public void speak()
{
System.out.println("ROAR");
}
}
//....etc for the other two animals
public class TestZoo
{
public static void main(String[] args)
{
Zoo myZoo = new Zoo();
Lion l = new Lion("Larry");
Elephant e = new Elephant("Eli");
Zebra z = new Zebra("Zayne");
myZoo.add(l); //<-- note that here I don't pass Animal objects to the
myZoo.add(e); // add method but subclasses of Animal
myZoo.add(z);
}
}
希望這有助於,即使有一個愚蠢的例子。
好吧,這是有道理的,但在主要方法,如果我反而寫 '動物l =新獅子(「拉里」); 動物e =新象(「Eli」); 動物z =新斑馬(「Zayne」);' 什麼新功能會給? – 2012-04-13 03:48:07
@Hubrid它提供的功能是可以將所有對象存儲在同一個列表或容器中,即使它們都具有不同的類型。 – 2012-04-13 03:49:41
我知道這是一種創建動物物體的有效方法,我只是爲什麼'動物l =新獅子(「拉里」);'永遠是首選/不是首選的獅子l =新獅子(「拉里「);'。 – 2012-04-13 03:50:53