多型的總結
多型
多型:是指物件的多種狀態;
多型的前提:
1.必須有子父類關係(有繼承);
2.必須有方法的重寫;
多型在java程式碼中的表現形式:
父類型別 變數名 = new 子類型別();
父介面 變數名 = new 實現類();
注意事項:
使用多型呼叫成員變數:
多型編譯執行時,都看父類;
使用多型呼叫成員方法:
編譯看父類,執行看子類;
多型的弊端:
多型 只能呼叫子父類共有的方法.不能呼叫子類特有的方法;
多型的好處:
提高程式的複用性與擴充套件性,靈活性;
//父類Animal
public abstract class Animal {
//抽象方法
public abstract void eat();
}
//子類Cat繼承Aminal父類
public class Cat extends Animal {
//重寫方法
public void eat() {
System.out.println("我在吃魚");
}
public void catch() {
System.out.println("我能抓老鼠");
}
}
//子類Dog繼承Aminal父類
public class Dog extends Animal {
//重寫eat方法
public void eat() {
System.out.println("我在咬骨頭");
}
public void watchDoor() {
System.out.println("我在家看門");
}
}
public class Test {
public static void main(String[] args) {
//建立貓,使用多型
Animal an = new Cat();
an.eat();//我在吃魚
an.catch();//編譯時不報錯,執行時報錯,父類沒有此方法
//建立狗,使用多型
Abimal an1 = new Dog();
an1.eat();//我在咬骨頭
an1.watchDoor();//編譯時不報錯,執行時報錯,父類沒有此方法
}
}
解決多型的弊端
向上向下轉型
向上轉型: 就是多型;
格式: 父類型別 變數名 = new 子類();
向下轉型: 相當於是自動型別轉換;
格式: 子類型別 變數名 = (子類型別)父類中的變數名;
變數名.子類特有的方法();
向下轉型也有弊端:
把父類的變數轉換成子類型別的時候,編譯器直接編譯通過;
解決方法: 使用關鍵字instanceof判斷;
instanceof的作用: 判斷該物件是不是該類的物件
格式: 物件名 instanceof 類名;
//父類Animal
public abstract class Animal {
//抽象方法
public abstract void eat();
}
//子類Cat繼承Aminal父類
public class Cat extends Animal {
//重寫方法
public void eat() {
System.out.println("我在吃魚");
}
public void catch() {
System.out.println("我能抓老鼠");
}
}
//子類Dog繼承Aminal父類
public class Dog extends Animal {
//重寫eat方法
public void eat() {
System.out.println("我在咬骨頭");
}
public void watchDoor() {
System.out.println("我在家看門");
}
}
public class Test {
public static void main(String[] args) {
//建立貓,使用多型
Animal an = new Cat();
an.eat();//我在吃魚
an.catch();//編譯時不報錯,執行時報錯,父類沒有此方法
//建立狗,使用多型
Abimal an1 = new Dog();
an1.eat();//我在咬骨頭
an1.watchDoor();//編譯時不報錯,執行時報錯,父類沒有此方法
Cat cat = (Cat)an1;//編譯時不出錯,執行時報錯 Dog can not cast to Cat
//解決方法
boolean flag = an instanceof Cat;
if (flag) {
Cat cat = (Cat)an;
an.catch();//我能抓老鼠
}
boolean flag2 = an instanceof Dog;
if (flag2) {
Dog dog = (Dog)an;
an.watchDoor();//我在家看門
}
}
}
相關文章
- 多型的知識點總結多型
- Java物件導向總結(多型)Java物件多型
- 泛型總結泛型
- 3年多的炒股總結
- Go 的資料型別總結Go資料型別
- oracle裡long型別的總結Oracle型別
- 【多執行緒總結(一)-基礎總結】執行緒
- JavaScript基本型別總結JavaScript型別
- 揹包題型總結
- Python的資料型別總結Python資料型別
- Mysql支援的資料型別(總結)MySql資料型別
- oracle下interval型別的用法總結Oracle型別
- golang 多協程的同步方法總結Golang
- JAVA入門學習初步總結3 方法類繼承多型等Java繼承多型
- JS 資料型別總結JS資料型別
- 後臺面試型別總結面試型別
- Java容器型別使用總結Java型別
- oracle 檔案型別總結Oracle型別
- OOM異常型別總結OOM型別
- 【多執行緒總結(四)-三大性質總結】執行緒
- (2)mysql 支援的資料型別總結MySql資料型別
- Python集合(set)型別的操作總結Python型別
- iOS 多執行緒總結iOS執行緒
- PWA 開發總結(坑多)
- java多執行緒總結Java執行緒
- noip多校聯考總結
- 多型中的轉型多型
- 技術轉型與考研總結
- Long raw和Long型別總結型別
- golang 中的四種型別轉換總結Golang型別
- MySQL修改資料型別的問題總結MySql資料型別
- MSSQL資料庫的欄位型別總結SQL資料庫型別
- Java 多執行緒 - 總結概述Java執行緒
- 【多媒體之聲音總結】
- Windows 多程式通訊API總結WindowsAPI
- JAVA 多執行緒總結(一)Java執行緒
- Android多執行緒總結Android執行緒
- Java多執行緒Queue總結Java執行緒