1.概述
1.1多態的定義
多態是同一個行為具有多個不同表現形式或形態的能力。
多態就是同一個接口,使用不同的實例而執行不同操作。
多態性是對象多種表現形式的體現。
1.2多態的優點
- 消除類型之間的耦合關系
- 可替換性
- 可擴充性
- 接口性
- 靈活性
- 簡化性
1.3多態存在的三個必要條件
繼承
重寫
父類引用指向子類對象
2.多態的實現方式
方式一:重寫:
這個內容已經在上一章節詳細講過,就不再闡述,詳細可訪問:Java 重寫(Override)與重載(Overload)。
方式二:接口
- 生活中的接口最具代表性的就是插座,例如一個三接頭的插頭都能接在三孔插座中,因為這個是每個國家都有各自規定的接口規則,有可能到國外就不行,那是因為國外自己定義的接口類型。
- java中的接口類似于生活中的接口,就是一些方法特征的集合,但沒有方法的實現。具體可以看 java接口 這一章節的內容。
方式三:抽象類和抽象方法
https://blog.csdn.net/weixin_45187434/article/details/106320376
3.向上轉型&向下轉型
向上轉型:多態本身是子類類型向父類類型向上轉換的過程,其中,這個過程是默認的。你可以把這個過程理解為基本類型的小類型轉大類型自動轉換,不需要強制轉換。 當父類引用指向一個子類對象時,便是向上轉型。 向上轉型格式:
父類類型 變量名 = new 子類類型(); 如:Father f= new Son();
向下轉型:父類類型向子類類型向下轉換的過程,這個過程是強制的。同樣可以把這個過程理解為基本類型的自動轉換,大類型轉小類型需要強制轉換。一個已經向上轉型的子類對象,將父類引用轉為子類引用,可以使用強制類型轉換的格式,向下轉使用格式:
Father father = new Son();
子類類型 變量名 = (子類類型) 父類變量名; 如:Son s =(Son) father;
4.例題
package Polymorphic;
//爺爺類
class Ye {public String show(Sun obj) {return ("Ye and Sun");}public String show(Ye obj) {return ("Ye and Ye");}}
//爸爸類
class Fu extends Ye {public String show(Fu obj) {return ("Fu and Fu");}public String show(Ye obj) {return ("Fu and Ye");}
}
//兒子類
class Zi extends Fu {}
//孫子類
class Sun extends Fu {}
public class PolymorphicTest {public static void main(String[] args) {Ye y = new Ye();Ye y2 = new Fu(); //向上Fu f = new Fu();Zi z = new Zi();Sun s = new Sun();System.out.println("第一題 " + y.show(f));System.out.println("第二題 " + y.show(z));System.out.println("第三題 " + y.show(s));System.out.println("第四題 " + y2.show(f)); System.out.println("第五題 " + y2.show(z));System.out.println("第六題 " + y2.show(s));System.out.println("第七題 " + f.show(f));System.out.println("第八題 " + f.show(z));System.out.println("第九題 " + f.show(s));}
}
4.例題答案
第一題 Ye and Ye
第二題 Ye and Ye
第三題 Ye and Sun
第四題 Fu and Ye
第五題 Fu and Ye
第六題 Ye and Sun
第七題 Fu and Fu
第八題 Fu and Fu
第九題 Ye and Sun