19_多型應用以及引用型別轉換的例子
阿新 • • 發佈:2020-11-03
首先定義一個類動物類
package ploy; //定義一個動物測試類 public class TestAnimal { public static void main(String[] args) { // 多型形式 父類引用指向子類物件 Animal animal = new Cat(); //呼叫eat()方法 備註:當你在使用多型的時候,程式會首先檢查父類中是否含有該方法, //如果沒有,擇編譯錯誤; 如果有,執行的是子類重寫之後的方法。 animal.eat(); Animal animal2= new Dog(); //呼叫eat()方法 animal2.eat(); //呼叫eat()方法 //Cat cat = new Cat(); //Dog dog = new Dog(); showCatEat(new Cat());//Animal animal = new Dog(); dog /* //檢視貓吃的東西 showCatEat(cat);*/ /* //檢視狗吃的東西 showDogEat(dog);*/ } //檢視貓具體吃什麼東西public static void showCatEat(Cat cat){ cat.eat(); } //檢視狗具體吃什麼東西 public static void showDogEat(Dog dog){ dog.eat(); } /* 以上兩個方法,可以簡化一下 */ //檢視動物他吃什麼 public static void showAnimalEat(Animal animal){ animal.eat(); } }
狗的類:
package ploy; //定義一個字類 public class Dog extends Animal{ //子類重寫父類中的eat()方法 @Override public void eat() { System.out.println("看骨頭"); } //看家 public void lookHome(){ } }
貓的類:
package ploy; //定義一個子類 public class Cat extends Animal{ //子類重寫父類中的eat()方法 @Override public void eat() { System.out.println("吃魚"); } //抓老鼠 public void catchMouse(){ System.out.println("抓老鼠"); } }
測試類:
package ploy; //定義一個動物測試類 public class TestAnimal02 { public static void main(String[] args){ //多型的形式 父類引用指向子類物件 //向上轉型 Animal animal = new Dog(); //貓抓老鼠的功能 animal.eat(); //狗看家的功能 //新增校驗instanceof 變數名 instanceof 資料型別 if (animal instanceof Dog){ //表明他是Dog型別 Dog dog = (Dog) animal; dog.lookHome(); } if (animal instanceof Cat){ //向下轉型 子類型別 變數名 = (子類型別) 父類變數名 Cat cat = (Cat) animal; cat.catchMouse(); } // java.lang.ClassCastException: 型別轉換異常 兩個沒有任何關聯的類是不能轉換的 // 兩個類是一種父子類關係,可以實現轉換 } }