Java物件導向--多型

Code-yu發表於2020-11-17

多型

概念

同一類的不同子類形態。可以宣告,父類物件變數儲存子類物件的形式

現實生活中存在很多多型的例子。
例如:水在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、向下轉向成功的前提:曾經發生過向上轉型

多型的優點與缺點

優點:提高了程式碼的維護性與擴充套件性

缺點:只能在繼承後的子類中使用,並且只能使用子類重寫父類的方法而不能使用子類特有的方法

相關文章