JAVA中“多型”案例學習
最近學習了多型的概念和使用,在此記錄學習一下。
首先,什麼是多型?
多型是指:同一個方法被呼叫,會因為呼叫物件的不同導致完全不同的行為。
說的有點抽象。先了解一下多型的三要素:繼承、重寫和父類引用指向子類物件
1. 多型是指 方法是多型,不是屬性的多型
2. 多型的存在要有三個條件:繼承、重寫和父類引用指向子類物件
3. 父類引用指向子類物件後,用該父類引用呼叫子類重寫的方法,此時多型就出現了
繼承和重寫比較好理解,那什麼叫做父類引用指向子類物件?這麼抽象的描述怎麼理解?
舉例來說:
首先實現類的繼承和方法重寫
public class Animal{
public void shout() {
System.out.println("動物叫");
}
}
class Cat extends Animal{
public void shout() {
System.out.println("貓叫");
}
}
然後進行列印測試
/**
*定義一個Test類
**/
public class Test {
public static void main(String[] args) {
//正常的例項化
Animal a = new Animal();
animalCry(a);
//這就發生了多型,因為有了繼承、重寫和父類引用指向子類物件Animal a = new Dog();
Dog d = new Dog();
animalCry(d);//狗叫
animalCry(new Cat());//貓叫
}
static void animalCry(Animal a) { //相當於進行了例項化Animal a = new Dog()/Animal a = new Cat()
a.shout(); //因為傳的物件不一樣,所以呼叫的方法也不一樣
}
}
Animal a = new Dog()或者Animal a = new Cat()就叫做父類引用"Animal a "指向了子類物件 “new Dog()”。
其實只要記住一點,在實際執行是時候是看的“=”右邊的是誰。左邊只是在給a 貼了一個Animal的標籤而已,但是本質上還是Dog或者Cat。
所以依次會列印出:動物叫、狗叫、貓叫
多型的使用是比較常見的,在另外一個特別重要的概念“回撥”中也會用到。後續再來補充。
補充一下
其實與多型密切相關的一個概念還有向上轉型和向下轉型
還是拿上面的程式碼舉例:
父類引用指向子類物件其實是向上轉型:
//向上轉型,編譯器認為a是Animal,執行起來還是以Dog執行
Animal a = new Dog();
向下轉型:
//假如直接將a賦值給d,編譯器不會通過,需要強制轉型
Dog d = a;
Dog d = (Dog)a;
強制轉型時要注意可能會出現錯誤(雖然編譯不會報錯),什麼意思呢?
現在給Dog 類中新增一個新的方法:
class Dog extends Animal{
public void shout() {
System.out.println("狗叫");
}
public void fly(){
System.out.println("狗會飛");
}
}
再加入一個向上轉型:Animal c = new Cat();
把c強制轉成Dog類:
//在編譯的時候d2中有fly()這個方法,但是在執行的時候沒有這個方法,會報錯!
Dog d2 = (Dog)c;
相關文章
- Java學習-多型Java多型
- java中的多型Java多型
- java中的列舉型別學習Java型別
- 碎片化學習Java(十一)-- Java if案例Java
- Java中多執行緒的案例Java執行緒
- Java學習——網上商城案例Java
- Head First Java學習筆記(7):繼承與多型Java筆記繼承多型
- 何為Java 中的多型?Java多型
- 碎片化學習Java(十六)Java For迴圈案例Java
- Java多型Java多型
- Java多執行緒學習Java執行緒
- 什麼是Java多型?如何實現Java多型?Java多型
- Java中的類繼承與多型Java繼承多型
- JavaSE基礎知識學習—–多型Java多型
- JAVA入門學習初步總結3 方法類繼承多型等Java繼承多型
- Java 的多型Java多型
- java多型demoJava多型
- java多型特性Java多型
- Java 多執行緒NIO學習Java執行緒
- 碎片化學習Java(四)-- Java資料型別Java資料型別
- 碎片化學習Java(十三)-- Java switch判斷星期幾案例Java
- 多型 案例三 (電腦組裝)多型
- java入門基礎學習----泛型Java泛型
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- java學習:Java中的其它類Java
- Java開發學習(二)----IOC、DI入門案例Java
- Java 多執行緒學習筆記Java執行緒筆記
- java浮點型別案例介紹Java型別
- Java多執行緒學習筆記(自用)Java執行緒筆記
- java 多型知識點Java多型
- Java物件導向--多型Java物件多型
- java繼承與多型Java繼承多型
- Java:多型乃幸福本源Java多型
- java多型性淺析Java多型
- Thinking in Java--Java多執行緒學習筆記(1)ThinkingJava執行緒筆記
- RxSwift 案例學習(一)Swift
- 前端學習-vue影片學習008-TS中的介面泛型自定義型別前端Vue泛型型別
- 如何學習Java? 在學習Java的過程中需要掌握哪些技能?Java