日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【设计模式】面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )

發(fā)布時(shí)間:2025/6/17 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、面向?qū)ο?3 要素
  • 二、多態(tài) ( 提升程序擴(kuò)展性 )
  • 三、不使用多態(tài)示例
  • 四、使用多態(tài)示例
  • 總結(jié)





一、面向?qū)ο?3 要素



面向?qū)ο?333 要素 :

封裝 : 解決 安全性 問題 ; 通過 private , protected , public 修飾方法 , 變量 , 以保證代碼安全性 ;

繼承 : 解決 代碼重用 問題 ; 子類繼承父類 ,

多態(tài) : 解決 程序擴(kuò)展 問題 ;





二、多態(tài) ( 提升程序擴(kuò)展性 )



多態(tài)有 333 種表現(xiàn) :

子類 重寫 父類方法 ;

相同方法名 不同參數(shù)方法 重載 ;

父類引用 指向 子類對(duì)象 ;


面向?qū)ο缶幊虝r(shí) , 建議 面向接口 編程 ;

如果不使用多態(tài) , 如果 添加新的類 時(shí) , 就需要 修改業(yè)務(wù)邏輯 , 明顯 違反了開閉原則 ;


面向?qū)ο笾?, 多態(tài)發(fā)生的條件 :

  • 子類 繼承 ( 實(shí)現(xiàn) ) 父類 ;
  • 父類引用 指向 子類對(duì)象 ;
  • 子類 重寫 父類方法 ;

使用多態(tài)后 , JVM 在運(yùn)行階段 , 才知道要執(zhí)行哪個(gè)類的方法 ;





三、不使用多態(tài)示例



業(yè)務(wù)場景 : 飛行器飛行 , 飛行器有 直升機(jī) 和 運(yùn)輸機(jī) , 每個(gè)飛行器都有起飛和降落方法 ;


直升機(jī)類 :

public class Helicopter {public void takeOff() {System.out.println("直升飛機(jī) 起飛");}public void land() {System.out.println("直升飛機(jī) 降落");} }

運(yùn)輸機(jī)類 :

public class TransportPlane {public void takeOff() {System.out.println("運(yùn)輸機(jī) 起飛");}public void land() {System.out.println("運(yùn)輸機(jī) 降落");} }

客戶端 : 分別為 直升機(jī) Helicopter 和 運(yùn)輸機(jī) TransportPlane 各自定義 111 個(gè)方法 ;

public class Client {public static void main(String[] args) {Client client = new Client();client.doFly();client.doFly2();}private void doFly() {Helicopter helicopter = new Helicopter();helicopter.takeOff();System.out.println("飛行");helicopter.land();}private void doFly2() {TransportPlane transportPlane = new TransportPlane();transportPlane.takeOff();System.out.println("飛行");transportPlane.land();} }

運(yùn)行結(jié)果 :



上述示例中 , 如果要添加新的飛行器 , 戰(zhàn)斗機(jī) , 就要定義新的 客戶端 Client 方法 , 修改客戶端的業(yè)務(wù)邏輯 ;

這顯然違背了 面向?qū)ο?777 大設(shè)計(jì)原則 中的 " 開閉原則 " ;



增加的新的戰(zhàn)斗機(jī)類 :

public class Fighter {public void takeOff() {System.out.println("戰(zhàn)斗機(jī) 起飛");}public void land() {System.out.println("戰(zhàn)斗機(jī) 降落");} }

客戶端修改后的結(jié)果 :

public class Client {public static void main(String[] args) {Client client = new Client();client.doFly();client.doFly2();client.doFly3();}private void doFly() {Helicopter helicopter = new Helicopter();helicopter.takeOff();System.out.println("飛行");helicopter.land();}private void doFly2() {TransportPlane transportPlane = new TransportPlane();transportPlane.takeOff();System.out.println("飛行");transportPlane.land();}private void doFly3() {Fighter fighter = new Fighter();fighter.takeOff();System.out.println("飛行");fighter.land();} }

執(zhí)行結(jié)果 :





四、使用多態(tài)示例



飛行器接口 :

public interface Aircraft {public void takeOff();public void land(); }

直升飛機(jī) :

public class Helicopter implements Aircraft {@Overridepublic void takeOff() {System.out.println("直升飛機(jī) 起飛");}@Overridepublic void land() {System.out.println("直升飛機(jī) 降落");} }

運(yùn)輸機(jī) :

public class TransportPlane implements Aircraft {@Overridepublic void takeOff() {System.out.println("運(yùn)輸機(jī) 起飛");}@Overridepublic void land() {System.out.println("運(yùn)輸機(jī) 降落");} }

客戶端類 :

public class Client {public static void main(String[] args) {Client client = new Client();Aircraft aircraft1 = new Helicopter();Aircraft aircraft2 = new TransportPlane();client.doFly(aircraft1);client.doFly(aircraft2);}private void doFly(Aircraft aircraft) {aircraft.takeOff();System.out.println("飛行");aircraft.land();} }

執(zhí)行結(jié)果 :



添加戰(zhàn)斗機(jī)類 , Client 中的相關(guān)方法不用修改 ;


添加的戰(zhàn)斗機(jī)類 :

public class Fighter implements Aircraft {@Overridepublic void takeOff() {System.out.println("戰(zhàn)斗機(jī) 起飛");}@Overridepublic void land() {System.out.println("戰(zhàn)斗機(jī) 降落");} }

修改后的客戶端類 :

public class Client {public static void main(String[] args) {Client client = new Client();Aircraft aircraft1 = new Helicopter();Aircraft aircraft2 = new TransportPlane();Aircraft aircraft3 = new Fighter();client.doFly(aircraft1);client.doFly(aircraft2);client.doFly(aircraft3);}private void doFly(Aircraft aircraft) {aircraft.takeOff();System.out.println("飛行");aircraft.land();} }

執(zhí)行結(jié)果 :

總結(jié)


多態(tài)作用 : 提升程序擴(kuò)展性 ;

多態(tài) 333 種表現(xiàn) :子類 重寫 父類方法 ; ② 相同方法名 不同參數(shù)方法 重載 ; ③ 父類引用 指向 子類對(duì)象 ;

多態(tài)發(fā)生 333 條件 : ① 子類 繼承 ( 實(shí)現(xiàn) ) 父類 ; ② 父類引用 指向 子類對(duì)象 ; ③ 子類 重寫 父類方法 ;

總結(jié)

以上是生活随笔為你收集整理的【设计模式】面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。