强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁(yè) > 產(chǎn)品 > 問(wèn)答 > 里氏替換原則,java什么是里氏替換原則

里氏替換原則,java什么是里氏替換原則

來(lái)源:整理 時(shí)間:2023-08-20 14:31:26 編輯:智能門戶 手機(jī)版

本文目錄一覽

1,java什么是里氏替換原則

子類可以替換父類了也就是是父類出現(xiàn)的地方都可以用子類替代switch不存在這個(gè)概念吧
所謂里氏替換原則,就是讓你的某一段程序耦合于基類或者接口,而不是具體繼承了基類的子類或?qū)崿F(xiàn)接口的具體類型。僅替換子類不會(huì)讓你這個(gè)程序的屬性有所改變。所謂多態(tài)機(jī)制,則是給了你達(dá)成上述原則的其中一種能力。舉個(gè)栗子來(lái)說(shuō),同樣是list基類/接口,子類可以是用array實(shí)現(xiàn)也可以用linkedlist實(shí)現(xiàn),但都必須實(shí)現(xiàn)at方法(得到具體某個(gè)index的值)。你現(xiàn)在用list實(shí)現(xiàn)了一個(gè)找最小值的算法,我們假設(shè)你是一個(gè)個(gè)遍歷過(guò)去找的,那么不管底下是array實(shí)現(xiàn)還是linkedlist實(shí)現(xiàn)(子類替換),你的算法都應(yīng)該是返回最小值(屬性不變),只是用linkedlist的時(shí)候很蠢。而你知道at方法對(duì)于array和linkedlist實(shí)現(xiàn)是不一樣的,list調(diào)用at的時(shí)候根據(jù)底下具體的實(shí)現(xiàn)決定調(diào)用哪一個(gè),這貨就叫做多態(tài)。

java什么是里氏替換原則

2,繼承的說(shuō)話與里氏替換原則

也就是說(shuō)基類所能提供的服務(wù)(所提供的功能)能夠在自類中有所作用。 比如鳥(niǎo)基類和繼承自他的燕子類,鳥(niǎo)類有飛行的方法,而燕子可以繼承使用這個(gè)方法,他們就合適作為繼承。 而鴕鳥(niǎo)就不適合繼承自鳥(niǎo),因?yàn)轼r鳥(niǎo)修改了他父類的功能,也就是屏蔽掉了?;卮鹧a(bǔ)充:面向?qū)ο笤O(shè)計(jì)的原則是這樣的,并不是說(shuō)一定,只不過(guò)如果子類會(huì)屏蔽或者修改父類行為,那么這種繼承就不是一個(gè)好的設(shè)計(jì)而已。你當(dāng)然可以把一個(gè)垃圾桶繼承自水桶,但是水桶是放水的,而垃圾桶屏蔽了水桶的放水的功能而放垃圾了,當(dāng)你使用多態(tài)特性的時(shí)候你會(huì)發(fā)現(xiàn)你有可能把水放在一個(gè)垃圾桶里面,這水還能喝么?
在面向?qū)ο笏枷胫锌芍?,派生類擁有基類向下公開(kāi)的所有特征,它是基類的一個(gè)特例。 當(dāng)派生類對(duì)象賦于基類類型時(shí),將出現(xiàn)以下情況:派生類的數(shù)據(jù)結(jié)構(gòu)依次對(duì)應(yīng)于基類的數(shù)據(jù)結(jié)構(gòu)。而派生類擁有的自己的數(shù)據(jù)將不可見(jiàn)。 當(dāng)基類的對(duì)象試圖轉(zhuǎn)換為派生類型時(shí),將出現(xiàn)基類對(duì)象的數(shù)據(jù)無(wú)法依次填充完派生類的所有數(shù)據(jù)結(jié)構(gòu)。這就造成了它將無(wú)法完成派生類定義的功能。編譯器將會(huì)提示甚至報(bào)錯(cuò)。 這就是派生類能勝任基類功能,而基類卻無(wú)法完全勝任派生類功能的原因。 強(qiáng)制轉(zhuǎn)換屬于 基類到派生的過(guò)程:那是因?yàn)?設(shè)計(jì)人員知道:該基類對(duì)象的數(shù)據(jù)結(jié)構(gòu)完全可以填充完派生類的結(jié)構(gòu)。否則,將出現(xiàn)強(qiáng)轉(zhuǎn)錯(cuò)誤。一般最好避免使用強(qiáng)轉(zhuǎn)! 還有,子類能夠出現(xiàn)在任何父類對(duì)象出現(xiàn)的地方不是完全正確的,父類有時(shí)也不會(huì)將自己的一些成員公開(kāi)給子類。

繼承的說(shuō)話與里氏替換原則

3,誰(shuí)能用一句通俗的話來(lái)說(shuō)名一下java中的里氏代換原則

里氏代換原則(LSP):如果對(duì)每一個(gè)類型為T1的對(duì)象o1,都有類型為T2的對(duì)象o2,使得以T1定義的所有程序P在所有的對(duì)象o1都代換成o2時(shí),程序P的行為沒(méi)有變化,那么類型T2是類型T1的子類型。換言之,一個(gè)軟件實(shí)體如果使用的是一個(gè)基類的話,那么一定使用于其子類,而且它根本不能察覺(jué)出基類對(duì)象和子類對(duì)象的區(qū)別。里氏代換原則是繼承復(fù)用的基石。只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不會(huì)受到影響時(shí),基類才真正被復(fù)用,而衍生類也才能夠在基類的基礎(chǔ)上增加新的行為。
就是 父類引用只能指向子類的實(shí)例?。。。?! 這個(gè)意思還可以說(shuō):子類的引用不能指向父類的實(shí)例夠簡(jiǎn)單了吧
都有類型為T2的對(duì)象o2,使得以T1定義的所有程序P在所有的對(duì)象o1都代換成o2時(shí)。里氏代換原則是繼承復(fù)用的基石
李氏代換原則,如果把“人”當(dāng)成父類,“程序員”可以看成是他的子類,程序員肯定是人,但人不一定就是程序員,例:人還可能是司機(jī)教師等,它們不一定會(huì)編程 所以把父類聲明實(shí)例化的對(duì)象強(qiáng)制轉(zhuǎn)換為子類對(duì)象會(huì)發(fā)生異常
就是 父類引用只能指向子類的實(shí)例?。。。?! 這個(gè)意思還可以說(shuō):子類的引用不能指向父類的實(shí)例夠簡(jiǎn)單了吧
李氏代換原則,如果把“人”當(dāng)成父類,“程序員”可以看成是他的子類,程序員肯定是人,但人不一定就是程序員,例:人還可能是司機(jī)教師等,它們不一定會(huì)編程 所以把父類聲明實(shí)例化的對(duì)象強(qiáng)制轉(zhuǎn)換為子類對(duì)象會(huì)發(fā)生異常

誰(shuí)能用一句通俗的話來(lái)說(shuō)名一下java中的里氏代換原則

4,如何理解里氏替換原則

我簡(jiǎn)單的給你說(shuō)一下吧。首先,這是編譯器的要求,如果不這么做,無(wú)法通過(guò)編譯。其次,面向?qū)ο蟮木幊?,其中繼承有個(gè)大原則,任何子類的對(duì)象都可以當(dāng)成父類的對(duì)象使用。如有父類人類,可以使用一般的槍,有警察類,可以使用任何的槍。class Person void shoot(SimpleGun simpleGun);}class Police extends Person void shoot(Gun gun);}其中SimpleGun extends Gun。這樣的話任何警察類的對(duì)象都可以被當(dāng)做人類來(lái)使用。也就是說(shuō)警察類既然會(huì)使用任何的槍,當(dāng)然可以使用一般的槍。Person person = new Police();person.shoot(simpleGun);而如果反過(guò)來(lái),普通人可以使用任何搶,警察只能使用一般槍。class Person void shoot(Gun gun);}class Police extends Person void shoot(SimpleGun simpleGun);}這樣的話就不合理了,既然警察是人類的一個(gè)子類,所以警察也是人類,既然是人類就應(yīng)該能使用人類的方法,也就是使用任何的槍,可以根據(jù)上面的定義,反而警察類的能力還變小了。所以有一個(gè)原則,子類的能力必須大于等于父類,即父類可以使用的方法,子類都可以使用。返回值也是同樣的道理。假設(shè)一個(gè)父類方法返回一個(gè)List,子類返回一個(gè)ArrayList,這當(dāng)然可以。如果父類方法返回一個(gè)ArrayList,子類返回一個(gè)List,就說(shuō)不通了。這里子類返回值的能力是比父類小的。還有拋出異常的情況。任何子類方法可以聲明拋出父類方法聲明異常的子類。而不能聲明拋出父類沒(méi)有聲明的異常。這一切都是為了,任何子類的對(duì)象都可以當(dāng)做父類使用。

5,里氏替換原則的簡(jiǎn)介

在面向?qū)ο笏枷胫锌芍缮悡碛谢愊蛳鹿_(kāi)的所有特征,它是基類的一個(gè)特例。 當(dāng)派生類對(duì)象賦于基類類型時(shí),將出現(xiàn)以下情況:派生類的數(shù)據(jù)結(jié)構(gòu)依次對(duì)應(yīng)于基類的數(shù)據(jù)結(jié)構(gòu)。而派生類擁有的自己的數(shù)據(jù)將不可見(jiàn)。 當(dāng)基類的對(duì)象試圖轉(zhuǎn)換為派生類型時(shí),將出現(xiàn)基類對(duì)象的數(shù)據(jù)無(wú)法依次填充完派生類的所有數(shù)據(jù)結(jié)構(gòu)。這就造成了它將無(wú)法完成派生類定義的功能。編譯器將會(huì)提示甚至報(bào)錯(cuò)。 這就是派生類能勝任基類功能,而基類卻無(wú)法完全勝任派生類功能的原因。 強(qiáng)制轉(zhuǎn)換屬于 基類到派生的過(guò)程:那是因?yàn)?設(shè)計(jì)人員知道:該基類對(duì)象的數(shù)據(jù)結(jié)構(gòu)完全可以填充完派生類的結(jié)構(gòu)。否則,將出現(xiàn)強(qiáng)轉(zhuǎn)錯(cuò)誤。一般最好避免使用強(qiáng)轉(zhuǎn)! 還有,子類能夠出現(xiàn)在任何父類對(duì)象出現(xiàn)的地方不是完全正確的,父類有時(shí)也不會(huì)將自己的一些成員公開(kāi)給子類。
里氏替換原則(liskov substitution principle lsp)面向?qū)ο笤O(shè)計(jì)的基本原則之一。 里氏替換原則中說(shuō),任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。 lsp是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。如此,問(wèn)題產(chǎn)生了:“我們?nèi)绾稳ザ攘坷^承關(guān)系的質(zhì)量?”liskov于1987年提出了一個(gè)關(guān)于繼承的原則“inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”——“繼承必須確保超類所擁有的性質(zhì)在子類中仍然成立?!币簿褪钦f(shuō),當(dāng)一個(gè)子類的實(shí)例應(yīng)該能夠替換任何其超類的實(shí)例時(shí),它們之間才具有is-a關(guān)系。該原則稱為liskov substitution principle——里氏替換原則。林先生在上課時(shí)風(fēng)趣地稱之為“老鼠的兒子會(huì)打洞”。^_^

6,里氏替換原則與依賴倒置原則有什么區(qū)別

區(qū)別:1. 定義不同:里氏替換原則是關(guān)于子類與父類的原則;依賴倒置原則是關(guān)于抽象與細(xì)節(jié)的原則。2. 應(yīng)用范圍不同:依賴倒置原則的應(yīng)用范圍比里氏替換原則更廣泛。3. 涉及的對(duì)象關(guān)系不同:里氏替換原則中的子類具有自己的獨(dú)立性;依賴倒置原則中的細(xì)節(jié)依賴于抽象。衍生知識(shí)點(diǎn):一、里氏替換原則定義1:如果對(duì)每一個(gè)類型為T1的對(duì)象o1,都有類型為T2的對(duì)象o2,使得以T1定義的所有程序P在所有的對(duì)象o1都代換成o2時(shí),程序P的行為沒(méi)有發(fā)生變化,那么類型T2是類型T1的子類型。定義2:所有引用基類的地方必須能透明地使用其子類的對(duì)象。通俗來(lái)講:子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。是OCP的擴(kuò)展。它包含以下四層含義:1. 子類可以實(shí)現(xiàn)父類的抽象,但不能覆蓋父類的非抽象方法2. 子類中可以增加自己特有的方法3. 當(dāng)子類的方法重載父類的方法時(shí),方法的前置條件(即方法的形參)要比父類方法的輸入更寬松4. 當(dāng)子類的方法實(shí)現(xiàn)父類的抽象方法時(shí),方法的后置條件(即方法的返回值)要比父類的更嚴(yán)格二、依賴倒置原則定義:高層模塊不應(yīng)該依賴底層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。問(wèn)題由來(lái):類A直接依賴類B,假如要將類A改為依賴類C,則必須通過(guò)修改類A的代碼來(lái)達(dá)成。這種場(chǎng)景下,類A一般是高層模塊,負(fù)責(zé)復(fù)雜的業(yè)務(wù)邏輯;類B和類C是低層模塊,負(fù)責(zé)基本的原子操作;假如修改類A,會(huì)給程序帶來(lái)不必要的風(fēng)險(xiǎn)。解決方案:將類A修改為依賴接口I,類B和類C各自實(shí)現(xiàn)接口I,類A通過(guò)接口I間接與類B和類C發(fā)生聯(lián)系,則會(huì)大大降低修改類A的幾率。核心思想:面向接口編程。含有下面3點(diǎn):1. 低層模塊盡量都要有抽象類或接口,或者兩者都有2. 變量的聲明類型盡量使抽象類或接口3. 用繼承時(shí)遵循里氏替換原則
里氏替換原則(Liskov Substitution Principle LSP)面向?qū)ο笤O(shè)計(jì)的基本原則之一。 里氏替換原則中說(shuō),任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。 LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。依賴倒置原則(Dependence Inversion Principle)是程序要依賴于抽象接口,不要依賴于具體實(shí)現(xiàn)。簡(jiǎn)單的說(shuō)就是要求對(duì)抽象進(jìn)行編程,不要對(duì)實(shí)現(xiàn)進(jìn)行編程,這樣就降低了客戶與實(shí)現(xiàn)模塊間的耦合。依賴倒置原則 A.高層次的模塊不應(yīng)該依賴于低層次的模塊,他們都應(yīng)該依賴于抽象。 B.抽象不應(yīng)該依賴于具體實(shí)現(xiàn),具體實(shí)現(xiàn)應(yīng)該依賴于抽象。
文章TAG:里氏替換原則java什么是里氏替換原則

最近更新

  • 5s不用原裝數(shù)據(jù)線嗎5s不用原裝數(shù)據(jù)線嗎

    蘋(píng)果5s原裝數(shù)據(jù)與非原裝數(shù)據(jù)行、數(shù)據(jù)行非。Apple5s原裝數(shù)據(jù)Line與山寨數(shù)據(jù)Line5s已鑒定山寨數(shù)據(jù)有什么區(qū)別和缺點(diǎn)?iphone可以用原裝數(shù)據(jù)以外的線充電嗎?iPhone可以使用原裝數(shù)據(jù)以外的線.....

    問(wèn)答 日期:2023-08-20

  • 激磁,什么是激磁激磁,什么是激磁

    什么是激磁2,熱鬧的新刻絲激磁是什么3,什么是激磁磁場(chǎng)4,什么叫激磁電流什么叫自饋試5,發(fā)電機(jī)激磁方式有哪幾種6,什么叫激磁電流1,什么是激磁電流通過(guò)線圈,激發(fā)而產(chǎn)生磁場(chǎng)2,熱鬧的新刻絲激磁是.....

    問(wèn)答 日期:2023-08-20

  • 制氧機(jī)有用嗎,家用制氧機(jī)好用嗎制氧機(jī)有用嗎,家用制氧機(jī)好用嗎

    家用制氧機(jī)好用嗎2,制氧機(jī)管用嗎制氧機(jī)真的有效嗎3,家用保健氧氣機(jī)真的管用么4,制氧機(jī)真的能制造氧氣嗎5,家用制氧機(jī)治療效果怎么樣6,家用制氧機(jī)真的有效果嗎1,家用制氧機(jī)好用嗎好用2,制氧機(jī).....

    問(wèn)答 日期:2023-08-20

  • 大數(shù)據(jù)和云計(jì)算哪個(gè)難大數(shù)據(jù)和云計(jì)算哪個(gè)難

    大數(shù)據(jù)云計(jì)算不難學(xué)。大數(shù)據(jù)云計(jì)算難學(xué)嗎?大數(shù)據(jù)云計(jì)算難學(xué)嗎?大數(shù)據(jù)云計(jì)算難學(xué)嗎?Da數(shù)據(jù)和Yun計(jì)算有什么區(qū)別?Da數(shù)據(jù)和Yun計(jì)算有什么區(qū)別?Yun計(jì)算和Da數(shù)據(jù)哪個(gè)就業(yè)前景好?云計(jì)算就業(yè)前景不.....

    問(wèn)答 日期:2023-08-20

  • uc3845,開(kāi)關(guān)電源電流控制芯片uc3845uc3845,開(kāi)關(guān)電源電流控制芯片uc3845

    開(kāi)關(guān)電源電流控制芯片uc38452,UC3845開(kāi)關(guān)電源七腳電壓是幾伏3,UC3845過(guò)流保護(hù)電路求助4,UC3845的特點(diǎn)5,基于UC3845雙管正激開(kāi)關(guān)電源研究設(shè)計(jì)6,UC3845的基本參數(shù)1,開(kāi)關(guān)電源電流控制芯片uc3845.....

    問(wèn)答 日期:2023-08-20

  • pr11型噴漆機(jī)器人簡(jiǎn)介pr11型噴漆機(jī)器人簡(jiǎn)介

    按漆分,可分為粉噴機(jī)器人、油噴機(jī)器人、噴漆、釉噴機(jī)器人等。焊接入門機(jī)器人Welding機(jī)器人焊接入門機(jī)器人是從事焊接(包括切割和噴涂)的行業(yè)機(jī)器人,您好,自動(dòng)噴涂設(shè)備目前使用機(jī)器人噴涂.....

    問(wèn)答 日期:2023-08-20

  • 以太網(wǎng)交換機(jī),以太網(wǎng)交換器以太網(wǎng)交換機(jī),以太網(wǎng)交換器

    以太網(wǎng)交換器2,以太網(wǎng)交換機(jī)的概念3,以太網(wǎng)交換機(jī)如何使用4,什么是千兆以太網(wǎng)交換機(jī)5,請(qǐng)問(wèn)什么是以太網(wǎng)交換機(jī)工業(yè)以太網(wǎng)交換機(jī)交換機(jī)工業(yè)交換機(jī)6,誰(shuí)能給我詳細(xì)介紹一下以太網(wǎng)交換機(jī)1,以太網(wǎng).....

    問(wèn)答 日期:2023-08-20

  • 電腦卸載游戲數(shù)據(jù)恢復(fù),蘋(píng)果卸載APP后數(shù)據(jù)恢復(fù)電腦卸載游戲數(shù)據(jù)恢復(fù),蘋(píng)果卸載APP后數(shù)據(jù)恢復(fù)

    電腦卸載恢復(fù)的軟件怎么樣?那么,Bei卸載-2恢復(fù)?電腦卸載軟件只能重新下載恢復(fù)??梢杂脭?shù)據(jù)恢復(fù)software恢復(fù),在下載過(guò)程中,系統(tǒng)會(huì)檢測(cè)到這個(gè)游戲之前已經(jīng)安裝過(guò),所以會(huì)自動(dòng)恢復(fù)你之前的游戲.....

    問(wèn)答 日期:2023-08-20