1. 程式人生 > >Java學習--多態

Java學習--多態

動物 靜態方法 args 擴展性 運行 宋體 tex .class cannot

1. 多態

多態:同一個對象(實物),在不同時刻體現出來的不同狀態

多態的前提:

A:要有繼承關系

B:要有方法重寫

C:要有父類引用指向子類對象

父類 f = new 子類()

多態中的成員訪問特點:

A:成員變量

編譯看左邊,運行看左邊

B:構造方法

創建子類的時候,訪問父類的構造方法,對父類的數據進行初始化

C:成員方法

編譯看左邊,運行看右邊

D:靜態方法

編譯看左邊,運行看右邊(靜態和類相關,算不上重寫,所以訪問還是左邊的)

由於成員方法存在方法重寫,所以它運行看右邊

多態的好處:

  1. 提高了代碼的維護性(繼承保證)
  2. 提高了代碼的擴展性(由多態保證)

多態的弊端:

  1. 不能使用子類的特有功能

把父類的引用強制裝換為子類的引用(向下轉型)

1.貓和狗多態練習

class Anamial{

    public void eat(){
        System.out.println("動物吃");
    }
    
}

class Dog extends Anamial{
    public void eat(){
        System.out.println("狗吃骨頭");
    }
    public void lookDoor(){
        System.out.println("狗看門");
    }
}

class Cat extends
Anamial{ public void eat(){ System.out.println("貓吃魚"); } public void play(){ System.out.println("狗玩遊戲"); } } class ExtendsDemo{ public static void main(String[] args){ System.out.println("Extends "); //定義動物為狗 Anamial a = new Dog(); a.eat();
//a.lookDoor(); 編譯會報錯,動物沒有狗的方法 //將動物還原成狗 Dog d = (Dog)a; d.eat(); d.lookDoor();
//a變成貓 a
= new Cat(); a.eat(); //a.play(); 編譯會報錯,動物沒有play方法 //將動物還原為狗 Cat c = (Cat)a; c.eat(); c.play(); //Dog dd = (Dog)a; 編譯不會報錯,運行報錯 java.lang.ClassCastException: Cat cannot be cast to Dog //不能將毛轉換成狗 } }

Java學習--多態