Java(4)_ 多型
阿新 • • 發佈:2021-08-05
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 記憶體圖解: