Java物件導向--多型
多型
概念
同一類的不同子類形態。可以宣告,父類物件變數儲存子類物件的形式
現實生活中存在很多多型的例子。
例如:水在100攝氏度的高溫下是氣體,在常溫下是液體,在0攝氏度以下是固體。這裡的多型是指一個物件具有多種形態
OOP中的多型與之類似。
同一個引用型別,使用不同的例項可以執行不同的操作,即父類引用子類物件——向上轉型。
java中的多型理解為另一種資料型別轉換
//寵物類
public class Pet {
public String name = "無名氏"; // 寵物暱稱
public Pet(String name){
this.name=name;
}
public void eat(){ }
}
//狗類
public class Dog extends Pet{
public Dog(String name) {
super(name);
}
@Override
public void eat() {
System.out.println("狗"+name+"吃骨頭");
}
}
//貓
public class Cat extends Pet{
public Cat(String name) {
super(name);
}
@Override
public void eat() {
System.out.println("貓"+name+"吃魚");
}
}
//主人類
public class Master {
public void food(Pet pet) {
pet.eat();
}
}
//測試類
public class Test {
public static void main(String[] args) {
Master m=new Master();//主人物件
//向上轉型
//宣告父類變數 儲存子類物件
//jvm在呼叫方法時會自動根據實際物件呼叫方法
Pet dog=new Dog("大黃");
Pet cat=new Cat("花花");
m.food(dog);
m.food(cat);
}
}
多型的使用
1、必須發生繼承
只有發生繼承多個物件才能進行聯絡
2、向上轉型
宣告父類變數儲存子類物件,這樣才能使用同一個變數表示多個不同相關聯的變數,jvm在進行使用時會根據不同物件進行使用
3、子類必須重寫父類方法
如果多個子類沒有重寫父類方法,在使用方法時,如果不重寫父類方法,那麼呼叫的還是父類方法,多型沒有意義,並且由於宣告的是父類變數所以只能呼叫父類宣告過的方法
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-bi3lsvZL-1605615553088)(img\image-20201020111143765.png)]
子類物件儲存至父類變數時,與子類一同建立的父類物件可以直接賦值,但子類中額外的屬性與方法在宣告的父類變數中並沒有進行宣告,父類變數會幫子類物件進行儲存但是,不能使用
向上轉型
宣告父類變數儲存子類物件(類似於自動型別轉換)
向下轉型
宣告子類變數儲存父類物件(類似於強制型別轉換)
向下轉型成功的前提條件:當前父類是由要轉換的子類物件向上轉型得來的(這個物件曾經就是這個類的物件)
總結:
1、多型發生的條件繼承、向上轉型、重寫
2、只能使用子類重寫父類的方法以及父類特有的屬性與方法
3、向下轉向成功的前提:曾經發生過向上轉型
多型的優點與缺點
優點:提高了程式碼的維護性與擴充套件性
缺點:只能在繼承後的子類中使用,並且只能使用子類重寫父類的方法而不能使用子類特有的方法
相關文章
- Java物件導向總結(多型)Java物件多型
- 物件導向-多型物件多型
- Java007-物件導向(多型)Java物件多型
- java-物件導向程式設計--多型Java物件程式設計多型
- JAVA物件導向之多型Java物件多型
- 物件導向:封裝,多型物件封裝多型
- JAVA高階物件導向二:認識多型 多型的好處Java物件多型
- JAVA物件導向基礎--封裝 繼承 多型Java物件封裝繼承多型
- [JAVA] Java物件導向三大特徵:封裝、繼承、多型Java物件特徵封裝繼承多型
- Java第八課. 物件導向特徵3-多型&抽象類Java物件特徵多型抽象
- [.net 物件導向程式設計基礎] (13) 物件導向三大特性——多型物件程式設計多型
- [譯] part 28: golang 的物件導向 -- 多型Golang物件多型
- Java — 物件導向Java物件
- Java物件導向Java物件
- [Java物件導向]Java物件
- Java物件導向04——三大特性之多型Java物件多型
- JAVA物件導向基礎--物件導向介紹Java物件
- java核心思想物件導向三大特性(封裝,繼承,多型)Java物件封裝繼承多型
- Java 重寫和過載區別——物件導向的多型性分析Java物件多型
- Java:Java的物件導向Java物件
- java的物件導向Java物件
- Java物件導向(一)Java物件
- java物件導向(中)Java物件
- java物件導向(上)Java物件
- Java 物件導向概述Java物件
- java物件導向(2)Java物件
- java物件導向(1)Java物件
- java物件導向(3)Java物件
- java物件導向(4)Java物件
- java物件導向(5)Java物件
- Java物件導向概述Java物件
- JAVA物件導向思想Java物件
- 物件導向三大特性-----封裝、繼承、多型物件封裝繼承多型
- 物件導向三大特徵(封裝/繼承/多型)物件特徵封裝繼承多型
- 物件導向基礎(1)--繼承 多型 重構物件繼承多型
- Java物件導向——類與物件Java物件
- JAVA(一)JAVA基礎/物件導向基礎/高階物件導向Java物件
- 【Java】瘋狂Java基礎(一)——物件導向的特徵:繼承、封裝和多型Java物件特徵繼承封裝多型