1. 程式人生 > 其它 >Java(4)_ 多型

Java(4)_ 多型

Java(4)_ 多型

1.1多型概述

同一個物件,在不同時刻表現出來的不同形態
舉例:貓
我們可以說貓是貓:貓 cat = new 貓();
我們也可以說貓是動物:動物 animal = new 貓();
這裡貓在不同的時刻表現出來了不同的形態,這就是多型

多型的前提和體現

  • 有繼承/實現關係
  • 有方法重寫
  • 有父類引用指向子類物件

1.2 多型中成員訪問特點

  • 成員變數:編譯看左邊,執行看左邊

  • 成員方法:編譯看左邊,執行看右邊

為什麼成員變數和成員方法的訪問不一樣呢?

  • 因為成員方法有重寫,而成員變數沒有

舉個例子:

//父類 動物類
public class Animal {
    public int age=10;
    public void eat(){
        System.out.println("動物吃東西");
    }
}
//子類 貓類
public class Cat extends Animal {

    public int age=20;
    public int weight=20;
    @Override
    public void eat() {
        //super.eat();
        System.out.println("貓吃魚");
    }

    public void playGame() {
        //super.eat();
        System.out.println("貓玩遊戲");
    }

//測試類
public class AnimalDemo {
    public static void main(String[] args) {

        Animal a=new Cat();
        a.eat();
        System.out.println(a.age);
    }
}

執行測試結果發現:

並且發現a.playGame會報錯,因為一開始是Animal a=new Cat();

1.3 多型的好處和弊端

  • 多型的好處:提高了程式的擴充套件性
    具體體現:定義方法的時候,使用父型別作為引數,將來在使用的時候,使用具體的子型別參與操作

1.4 多型中的轉型

  • 向上轉型
    從子到父
    父類引用指向子類物件
  • 向下轉型
    從父到子
    父類引用轉為子類物件

舉例:

        Animal a = new Cat(); //向上轉型
        a.eat();
        System.out.println(a.age);

        /*Cat c =new Cat();
        c.eat();
        c.playGame();*/

        //向下轉型
        Cat c = (Cat) a;
        c.eat();
        c.playGame();

1.5 記憶體圖解: