成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Java設(shè)計(jì)模式的里氏置換原則是什么

這篇文章主要講解了“Java設(shè)計(jì)模式的里氏置換原則是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Java設(shè)計(jì)模式的里氏置換原則是什么”吧!

創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需策劃,是成都網(wǎng)站推廣公司,為成都VR全景提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開(kāi)發(fā)等。成都網(wǎng)站營(yíng)銷推廣熱線:028-86922220

里氏置換原則(Liskov Substitution Principle),簡(jiǎn)稱LSP

定義:

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

所有引用基類的地方必須能夠透明的使用其子類對(duì)象。

也就是說(shuō),只要父類出現(xiàn)的地方子類就能夠出現(xiàn),而且替換為子類不會(huì)產(chǎn)生任何錯(cuò)誤或異常。但是反過(guò)來(lái),子類出現(xiàn)的地方,替換為父類就可能出現(xiàn)問(wèn)題了。

這個(gè)原則是為良好的繼承定義一個(gè)規(guī)范,簡(jiǎn)單的講,有4層含義:

一、子類必須完全實(shí)現(xiàn)父類的方法

定義一個(gè)抽象類

public abstract class ViewPoint {      //去麗江旅游      public abstract void where();  }

下面兩個(gè)類是實(shí)現(xiàn)這個(gè)抽象類

public class Lijiang extends ViewPoint {         @Override     public void where() {          System.out.println("歡迎來(lái)到麗江...");      }     }   public class Zhangjiajie extends ViewPoint {         @Override     public void where() {          System.out.println("歡迎來(lái)到張家界...");      }     }

人物是涂涂,在里面設(shè)置類類型來(lái)傳遞參數(shù)。此時(shí)涂涂要去的旅游景點(diǎn)還是抽象的

public class Tutu {      //定義要旅游的景點(diǎn)      private ViewPoint viewpoint;      //涂涂要去的景點(diǎn)      public void setViewPoint(ViewPoint viewpoint)      {          this.viewpoint = viewpoint;      }             public void travelTo()      {          System.out.println("涂涂要去旅游了");          viewpoint.where();      }  }

場(chǎng)景類。設(shè)置具體要去的景點(diǎn)

public class Sence {      public static void main(String args[])      {          Tutu tutu = new Tutu();          //設(shè)置要去的旅游景點(diǎn)          tutu.setViewPoint(new Lijiang());          tutu.travelTo();      }  }

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

涂涂要去旅游了
歡迎來(lái)到麗江...

二、子類可以有自己的特性

也就是說(shuō)在類的子類上,可以定義其他的方法或?qū)傩?/p>

三、覆蓋或者實(shí)現(xiàn)父類的方法時(shí)輸入?yún)?shù)可以被放大

父類能夠存在的地方,子類就能存在,并且不會(huì)對(duì)運(yùn)行結(jié)果有變動(dòng)。反之則不行。

父類,say()里面的參數(shù)是HashMap類型,是Map類型的子類型。(因?yàn)樽宇惖姆秶鷳?yīng)該比父類大)

import java.util.Collection;  import java.util.HashMap;     public class Father {      public Collection say(HashMap map)      {          System.out.println("父類被執(zhí)行...");          return map.values();      }  }

子類,say()里面的參數(shù)變成了Map類型,Map范圍比HashMap類型大,符合LSP原則。注意這里的say不是覆寫(xiě)父類的say,因?yàn)閰?shù)類型不同。而是重載。

import java.util.Collection;  import java.util.Map;     /*   * 子類繼承了父類的所有屬性   */ public class Son extends Father {      //方法輸入?yún)?shù)類型      public Collection say(Map map)      {          System.out.println("子類被執(zhí)行...");          return map.values();      }  }

場(chǎng)景類

import java.util.HashMap;     public class Home {      public static void main(String args[])      {          invoke();      }             public static void invoke()      {          //父類存在的地方,子類就應(yīng)該能夠存在          //Father f = new Father();          Son s = new Son();          HashMap map = new HashMap();          //f.say(map);          s.say(map);      }  }

無(wú)論是用父類還是子類調(diào)用say方法,得到的結(jié)果都是

父類被執(zhí)行...

但是,如果將上面Father里的say參數(shù)改為Map,子類Son里的say參數(shù)改為HashMap,得到的結(jié)果就變成了

f.say(map)結(jié)果:父類被執(zhí)行...

s.say(map)結(jié)果: 子類被執(zhí)行...

這樣會(huì)造成邏輯混亂。所以子類中方法的前置條件必須與父類中被覆寫(xiě)的前置條件相同或者更寬。

四、覆寫(xiě)或者實(shí)現(xiàn)父類的方法時(shí)輸出結(jié)果可以被縮小

其實(shí)與上面的類似,也就是父類能出現(xiàn)的地方子類就可以出現(xiàn),而且替換為子類不會(huì)產(chǎn)生任何錯(cuò)誤或者異常,使用者也無(wú)需知道是父類還是子類。但是反過(guò)來(lái)就不行了,有子類出現(xiàn)的地方,父類未必就適應(yīng)。(畢竟子類的范圍要>=父類的范圍)

感謝各位的閱讀,以上就是“Java設(shè)計(jì)模式的里氏置換原則是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Java設(shè)計(jì)模式的里氏置換原則是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

文章題目:Java設(shè)計(jì)模式的里氏置換原則是什么
鏈接URL:http://jinyejixie.com/article36/gceesg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、、ChatGPT、面包屑導(dǎo)航網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
四子王旗| 体育| 富蕴县| 宣恩县| 青河县| 木里| 漠河县| 濮阳市| 镇原县| 大田县| 惠州市| 黄浦区| 广西| 昭通市| 奈曼旗| 塘沽区| 阳新县| 搜索| 肇东市| 泽库县| 贵定县| 乌鲁木齐县| 凤阳县| 获嘉县| 秦安县| 邵武市| 平凉市| 游戏| 崇礼县| 祁东县| 汉沽区| 阜宁县| 临城县| 大冶市| 武义县| 宣城市| 本溪| 从江县| 江源县| 衢州市| 台南县|