<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-208  評論-469  文章-30  trackbacks-0
    里氏代換原則是什么?聽起來很高深,不過我們也不是什么學院派,就不講大道理了,直接拿個例子來說一下。
    我們拿人和程序員舉個例子。人是一個大類,程序員是繼承自人的子類??纯催@句話:人需要吃飯。這句話我們把“人”換成“程序員”,就是:程序員需要吃飯,這樣換不會有什么問題。現在我們反過來,把“程序員可以用計算機寫程序”里邊的程序員換成“人”,就是:人可以用計算機寫程序。這樣就不一定正確了,否則問題可就大了,我們這些程序員只怕沒得飯吃了。
    這個就是里氏代換原則:使用父類的地方肯定可以用它的一個子類來替換掉,但是使用一個子類的時候用它的父類來替換就不一定正確了。
    好,現在我們回到程序設計里邊來。
    看看下面的程序:
    一個學校里邊,有兩種人:學生、老師。他們都要吃飯和睡覺。

    public interface 人{
    ??? void 吃飯();
    ??? void 睡覺();
    }
    ?
    public class 學生 implements 人{
    ??? public void 吃飯(){
    ??????? //去食堂吃飯
    ??? }
    ??? public void 睡覺(){
    ??????? //回寢室睡覺
    ??? }
    ??? ...//其他特有方法,比如泡妞、打游戲
    }
    ?
    public class 老師 implements 人{
    ??? public void 吃飯(){
    ??????? //回家吃飯
    ??? }
    ??? public void 睡覺(){
    ??????? //回家睡覺
    ??? }
    ??? ...//其它特有方法,比如為生兒育女傳宗接代的歷史使命努力等不足為外人道的事情
    }
    ?
    public class 學校{
    ??? public void 開飯(人 ren){
    ??????? ren.吃飯();
    ??? }
    ??? public void 放學(人 ren){
    ??????? ren.睡覺();
    ??? }
    }
    ?
    這里就用到了里氏代換原則,"開飯()"和"放學()"的參數都是人,那么這個地方如果換成學生和老師肯定也可以。
    ?
    人 a = new 學生();
    學校.開飯(a);
    學校.放學(a);
    ?
    這樣執行的結果就是學生回寢室吃飯。
    ?
    人 b = new 老師();
    學校.開飯(b);
    學校.放學(b);
    ?
    這樣執行的結果就是老師回家吃飯。
    ?
    為什么要這樣寫呢?這樣寫有什么好處呢?
    我在開飯的時候完全可以直接調用"學生.吃飯();"、"老師.吃飯();"啊。
    接著看。
    有一天,學校里來了第三種人,家長。
    家長既不是去寢室睡覺也不是回家睡覺,而是旅館睡覺,既不是去食堂吃飯也不是回家吃飯,而是去下館子。
    這個時候學校這個系統該怎么處理呢?
    如果原來沒有定義"人"這個接口那就麻煩啦,所有用到人的地方代碼都要改。
    現在不一樣了,我可以直接定義一個類:家長,這個類實現人這個接口就可以了。
    好,看代碼:
    ?
    public class 家長 implements 人{
    ??? public void 吃飯(){
    ??????? //下館子
    ??? }
    ??? public void 睡覺(){
    ??????? //去旅館睡覺
    ??? }
    ??? ...//其它特有方法,比如會見老師,曉之以錢,動之以利等等,不一而足
    }
    ?
    在調用的時候不需要修改任何代碼,還和原來一樣:
    ?
    人 c=new 家長();
    學校.開飯(c);
    學校.放學(c);
    ?
    輕松搞定家長的食宿問題!
    ?
    這樣一來學校來再多的客人都沒關系啊,絕對可以應付自如,這也就是傳說中的可擴展性!
    不知道初學者看到這里是不是能夠明白接口的作用。如果你還不明白,那么你把人這個接口去掉,自己寫一個學校開飯和放學的類,然后再加一個家長這個新新人類進去,看看你的代碼是什么樣子的,再想一下在人口這么多的中國,萬一哪天你的學校里來了成千上萬個新新人類你該怎么辦!
    posted on 2007-09-15 11:05 EricWong 閱讀(3716) 評論(21)  編輯  收藏 所屬分類: Java

    評論:
    # re: 很形象的接口的使用——針對初學者 2007-09-17 12:41 | 中華乞丐
    謝謝 我是一個JAVA初學著,對于接口,父類,子類很模糊,看了你的文章好象明白點了  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2007-09-20 18:17 | 點點
    贊同樓上的,好像明白了不少,很形象的例子  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2007-09-30 02:47 | 熊貓
    討厭JAVA呀

      回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 [未登錄] 2008-01-05 22:30 | neil
    很形象的例子,多謝多謝,收獲頗豐,呵呵!!!
    還有再來滴~~~~~~  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 [未登錄] 2008-03-10 01:49 | 小馬
    恩 很不錯 很喜歡你的文章 雖然只能看懂一些簡單的 呵呵 還是謝謝了   回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2009-04-28 21:51 | mstar
    good  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 [未登錄] 2009-07-28 21:23 | Louis
    哎 受教了,有一個大概的理解了,謝謝,話說我還應該看一下你的其他文章呢  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2009-11-05 11:14 | 耗子吳
    豁然開朗,哈哈!比喻的好!  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2009-12-02 09:53 | 騷動
    從來看帖不頂,不過這例子寫的確實好,而且很幽默哦,
    又如生兒育女傳宗接代的歷史使命努力等不足為外人道的事情曉之以錢,
    又如動之以利等等,不一而足
    學習了??!  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2009-12-09 00:21 | kobe
    挺不錯的例子,謝謝了  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 [未登錄] 2010-01-21 11:28 | 小螞蟻
    學習就該這樣,多一點幽默、詼諧 讓死板的代碼也活躍起來  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2010-04-14 14:14 | maytures
    good...  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2010-06-07 15:53 | dingwei
    寫得非常好啊!人才??!  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2010-11-05 16:29 | 豬滿天飛
    扯淡 這種問題應該用抽象類  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2010-11-07 17:19 | 獲得法律手段
    很生動的例子,想法很好!支持!雖然初學java,但是對這些復雜概念的理解必須要深刻才行。切記“勿在浮沙筑高臺!”。  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2010-11-11 21:03 | 說明
    你說的很表面。
    雖然感覺上是形象,但在實際應用中,真正理解的人少。
    可以說看過你說的這個,
    從感覺上來說,會有100%的人明白。
    但對于實際應用中的邏輯來說,只會有10%的人明白,可能更少。

    因為有時候道理大家都懂,但這個道理對我們有什么幫助卻不懂。
    這是我給你的建議。

    可以在想想,怎么才能讓理解率更高一些,作為一個老師來說,不能按自己的思維去傳授學生,應該學會理解大眾思維,聚焦個性思維。  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2011-11-28 20:32 |
    可以  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 [未登錄] 2013-05-11 21:11 | 可可
    不錯  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2013-05-28 11:29 | 小王
    牛!我頂!  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 [未登錄] 2014-01-09 09:43 |
    碉堡了  回復  更多評論
      
    # re: 很形象的接口的使用——針對初學者 2014-03-16 11:45 | sir
    @中華乞丐
    呵呵,通俗易懂,真不錯!  回復  更多評論
      
    主站蜘蛛池模板: 亚洲一区二区免费视频| 九九综合VA免费看| 3344永久在线观看视频免费首页 | 亚洲av永久无码精品古装片| 婷婷国产偷v国产偷v亚洲| 女人让男人免费桶爽30分钟| 国产精品高清视亚洲精品| 中文字幕无码不卡免费视频| 亚洲国产成+人+综合| 国产精品久久久久久久久免费| 久久久亚洲欧洲日产国码是AV| 99久久人妻精品免费一区| 亚洲国产一区在线| 亚洲一级毛片免费观看| 亚洲国产人成在线观看| 无码永久免费AV网站| 亚洲综合av一区二区三区| 国产免费牲交视频| 一级中文字幕免费乱码专区| 亚洲爽爽一区二区三区| 最近更新免费中文字幕大全| 亚洲成在人天堂一区二区| ww在线观视频免费观看| 亚洲精品伦理熟女国产一区二区| 四虎永久免费观看| 两个人日本免费完整版在线观看1| 久久精品国产亚洲香蕉 | 蜜桃AV无码免费看永久| 日韩亚洲不卡在线视频中文字幕在线观看 | 精品亚洲成a人片在线观看| 亚洲视频免费观看| 亚洲av永久无码精品秋霞电影秋| 四虎影在线永久免费四虎地址8848aa | 亚洲国产系列一区二区三区| 国产在线a不卡免费视频| 亚洲精品黄色视频在线观看免费资源| 国产亚洲成AV人片在线观黄桃| 99无码人妻一区二区三区免费| 亚洲第一街区偷拍街拍| 国产精品亚洲综合一区| 啦啦啦完整版免费视频在线观看 |