面向對象第三個特徵----多態II(類型判斷)

abstract class Animal
{
    abstract void eat();
}

class Dog extends Animal
{
    public void eat() {
        System.out.println("啃骨頭");
    }
    public void play() {
        System.out.println("玩球球");
    }
}

class Cat extends Animal
{
    public void eat() {
        System.out.println("喫魚");
    }
    public void CatchMouse() {
        System.out.println("抓老鼠");
    }
}



public class DuoTaiDemo {

    public static void main(String[] args) {
//      Cat c = new Cat();
//      Dog d = new Dog();
//      c.eat();
//      d.eat();
//      method(new Cat());
//      method(new Dog());

//      Animal a = new Cat();//自動類型提升,貓對象提升爲動物類型。
//      a.eat();//但是會造成貓對象的特有功能無法被訪問。
//              //其作用就是限制對特有功能的訪問。
//              //專業上講:向上轉型。
//      
//      //如果還想使用貓的特有功能。
//      //可以將對象進行向下轉型。
//      Cat c = (Cat)a;//向下轉型的目的就是爲了調用特有方法。 
//      c.CatchMouse();

        method(new Cat());
    }
    public static void method(Animal a) {
        a.eat();
        //如果傳進來一個animal 我想對animal的子類調用其特有方法。
        //之前所說是通過向下轉型。即:
        Cat c = (Cat)a;
        c.CatchMouse();
        //然而animal的子類有很多,傳進來的不一定是cat
        //因此,我們需要對其進行類型判斷。引入關鍵字:instanceof
        if(a instanceof Dog)//通常在對象向下轉型之前進行益於健壯性的判斷。
        {
            Dog d = (Dog)a;
            d.play();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章