多態: 對於用一個事物具有多種表現形式,比如動物的叫聲有多種,鳥叫聲,狗叫聲,豬叫聲等多種不同結果,稱之爲多態。多態要有繼承,方法的重寫以及父類引用指向子類對象!(這句很重要!)
向上轉型: 父類引用指向子類對象。通俗地說就是將子類對象轉爲父類對象,此處父類對象可以是接口,向上轉型是從一個較具體的類轉化爲一個較抽象的類。
向下轉型: 將父類對象轉化爲子類對象的稱爲向下轉型,向下轉型是從一個較抽象的類轉化爲一個較具體的類
向上轉型實例
package practice;
public class Animal {
public void voice() {
System.out.println("普通動物叫聲");
}
public void Animal_test_voice(Animal c) { //傳入父類Animal的c作爲形參 ,父類的引用,引用下邊的子類對象
c.voice();
}
public static void main(String[]args) {
Animal a = new cat(); //向上轉型 cat()子類對象,被上邊的父類引用
Animal d = new dog();
a.voice(); //到類Animal_test_voice執行,因爲cat屬於Animal中的一類
d.voice();
//向下轉型需要先做向上轉型再做向下轉型,詳細下邊會解釋
cat a2 = (cat)a; //向下轉型,強制類型轉化,將a轉化爲a2
a2.catvoice(); //輸出喵喵喵
}
}
class cat extends Animal { //繼承Animal
public void voice() { //
System.out.println("貓叫聲");
}
public void catvoice() {
System.out.println("喵喵喵"); //這是cat類的一個方法,不屬於Animal類
}
}
class pig extends Animal{
public void voice() {
System.out.println("豬叫聲");
}
}
class dog extends Animal{
public void voice() {
System.out.println("狗叫聲");
}
}
輸出結果爲
貓叫聲
狗叫聲
喵喵喵
Animal a = new cat(); //向上轉型,子類對象轉化爲父類
這一句是向上轉型的關鍵,一般都爲 父類 參數 = new 子類對象
向下轉型呢,程序在運行時需要通過編譯,在上邊Animal a = new cat();
,將Animal賦給a,在執行a.voice時,編譯器先找Animal裏邊尋找cat的voice,有人會問爲什麼不寫a.catvoice,這是不行的,編譯器會認爲a是屬於Animal,而catvoice方法是cat類裏邊的,不屬於Animal,所以需要做強制類型轉換cat a2 = (cat)a;
將a這個重新賦給cat a2