<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 一、繼承的問題 >我們知道Java的三大特性:封裝,繼承,多態。Java 繼承有很多優點,是減少重復代碼的可靠手段。 但是繼承同時存在一些`缺點`: 1.類的耦合性增加了。比如父類更改之后子類也同時需要更改 2.降低代碼靈活性。因為繼承時,父類會對子類有約束性 我們使用`里氏替換原則`,可以減少繼承帶來的問題。 ## 二、定義 ``` 里氏替換原則(LSP)指的是所有引用基類的地方都可以透明的使用其子類的對象 可以理解為:只要有父類出現的地方,都可以使用子類來替代。而且不會出現任何錯誤或者異常。 但是反過來卻不行。子類出現的地方,不能使用父類來替代。 如果不符合上述的規定的話,我們可以想象子類的實例化調用方法時候,調用的卻是父類的方法。 會出現意想不到的結果 ``` ## 三、具體約束 1. 子類必須實現父類的抽象方法,但不得重寫父類的非抽象(已實現的)方法。 2. 子類中可增加自己特有的方法。(可以隨時擴展) 3. 當子類覆蓋或者實現父類的方法時,方法的前置條件(方法形參)要比父類輸入參數更加寬松。 否則會調用到父類的方法。 4. 當子類的方法實現父類的抽象方法時,方法的后置條件(即方法的返回值)要比父類更嚴格。 否則會調用到父類的方法。 >在講開閉原則的時候埋下了一個伏筆,在獲取折扣時重寫覆蓋了父類的 getPrice() 方法,增加了一個獲取原價的方法 getOriginPrice(),顯然就違背了里氏替換原則。我們修改一下代碼,不應該覆蓋 getPrice() 方法,增加 getDiscountPrice() 方法: ~~~ public class JavaDiscountCourse extends JavaCourse { public JavaDiscountCourse(Integer id, String name, Double price) { super(id, name, price); } public Double getDiscountPrice() { return super.getPrice() * 0.61; } } ~~~ >里氏替換原則只存在于父類與子類之間,約束繼承泛濫 ## 四、最佳實踐 >我們最好將父類定義為抽象類,并定義抽象方法,讓子類重新定義這些方法, 當父類是抽象類時候,父類不能實例化
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看