Java中多型相關知識點
阿新 • • 發佈:2020-12-09
多型
1.多型概述
同一個物件在不同時刻表現出的不同形態
多型的前提和體現:
- 有繼承/實現關係
- 有方法重寫
- 有父類引用指向子類物件(Animal a = new Cat();)
2.多型中的成員訪問特點
- 成員變數:編譯看左邊,執行看右邊
- 成員方法:編譯看左邊,執行也看左邊
為什麼成員變數和成員方法的訪問不一樣呢?
- 因為成員方法有重寫,而成員變數沒有.
示例:
父類
package com.itheima_06; public class Animal { public int age = 40; public void eat(){ System.out.println("動物吃東西"); } }
子類
package com.itheima_06;
public class Cat extends Animal {
public int age = 10;
public int weight = 15;
@Override
public void eat() {
System.out.println("貓吃魚");
}
public void playGame(){
System.out.println("貓捉迷藏");
}
}
測試類
package com.itheima_06; public class AnimalDemo { public static void main(String[] args) { //有父類引用指向子類物件 Animal a = new Cat(); System.out.println(a.age); // System.out.println(a.weight); 報錯 成員變數編譯和執行都看左邊 a.eat(); //多型中的成員方法,編譯看左邊,執行看右邊 //a.playGame(); 報錯 } }
3.多型的好處和弊端
多型的好處:提高了程式的擴充套件性
集體體現:定義方法的時候,使用父型別作為引數,將來在使用時,使用具體的子型別參與操作
多型的弊端:不能使用子類的特有功能
//動物操作類 public class AnimalOperator { /* public void useAnimal(Cat c){ c.eat(); } public void useAnimal(Dog d){ d.eat(); } */ //傳入的引數採用Animal就不用每次新建一個類就為他新定義一個方法 public void useAnimal(Animal a) { //Animal a = new Cat(); //Animal a = new Dog(); a.eat(); } }
//測試類
public class AnimalDemo {
public static void main(String[] args) {
//建立動物操作類的物件,呼叫方法
AnimalOperator animalOperator = new AnimalOperator();
Cat c = new Cat();
animalOperator.useAnimal(c);
Dog d = new Dog();
animalOperator.useAnimal(d);
}
}
4.多型中的轉型
- 向上轉型
- 向下轉型
public class AnimalDemo {
public static void main(String[] args) {
//向上轉型
Animal a = new Cat();
a.eat();
//不能呼叫子類的特有方法play()
//向下轉型
Cat c = (Cat)a;
//可以呼叫子類中的特有方法play了
c.play();
}
}