1. 程式人生 > 實用技巧 >19_多型應用以及引用型別轉換的例子

19_多型應用以及引用型別轉換的例子

首先定義一個類動物類

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:  型別轉換異常   兩個沒有任何關聯的類是不能轉換的
//                                                                      兩個類是一種父子類關係,可以實現轉換
    }

}