<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### [替代 vs 擴展](https://lingcoder.gitee.io/onjava8/#/book/09-Polymorphism?id=%e6%9b%bf%e4%bb%a3-vs-%e6%89%a9%e5%b1%95) 采用“純粹”的方式創建繼承層次結構看上去是最清晰的方法。即只有基類的方法才能在派生類中被重寫,就像下圖這樣: ![類圖](https://lingcoder.gitee.io/onjava8/images/1562406479787.png) 這被稱作純粹的“is - a"關系,因為類的接口已經確定了它是什么。繼承可以確保任何派生類都擁有基類的接口,絕對不會少。如果按圖上這么做,派生類將只擁有基類的接口。 純粹的替代意味著派生類可以完美地替代基類,當使用它們時,完全不需要知道這些子類的信息。也就是說,基類可以接收任意發送給派生類的消息,因為它們具有完全相同的接口。只需將派生類向上轉型,不要關注對象的具體類型。所有一切都可以通過多態處理。 ![](https://lingcoder.gitee.io/onjava8/images/1562409366638.png) 按這種方式思考,似乎只有純粹的“is - a”關系才是唯一明智的做法,其他任何設計只會導致混亂且注定失敗。這其實也是個陷阱。一旦按這種方式開始思考,就會轉而發現繼承擴展接口(遺憾的是,extends 關鍵字似乎慫恿我們這么做)才是解決特定問題的完美方案。這可以稱為“is - like - a” 關系,因為派生類就像是基類——它有著相同的基本接口,但還具有需要額外方法實現的其他特性: ![](https://lingcoder.gitee.io/onjava8/images/1562409366637.png) 雖然這是一種有用且明智的方法(依賴具體情況),但是也存在缺點。派生類中接口的擴展部分在基類中不存在(不能通過基類訪問到這些擴展接口),因此一旦向上轉型,就不能通過基類調用這些新方法: ![](https://lingcoder.gitee.io/onjava8/images/1562409926765.png) 如果不向上轉型,就不會遇到這個問題。但是通常情況下,我們需要重新查明對象的確切類型,從而能夠訪問該類型中的擴展方法。下一節說明如何做到這點。
                  <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>

                              哎呀哎呀视频在线观看