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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 連載:面向對象葵花寶典:思想、技巧與實踐(9) - “抽象類” 詳解 抽象類是一種特殊的類,其特殊性在于**抽象類只能用于繼承,不能被實例化為具體的對象**。例如在Java中不能new一個抽象類,但可以extends一個抽象類。 ? 抽象類的定義其實很簡單,但其使用并不那么簡單,有幾個問題我們需要深入研究一下。 ? **第一個問題是:有了類,為什么還要抽象類,為什么設計一種只能繼承,不能實例化的類?** 答案就在于:某些場景下普通類不夠用。例如,“蘋果”、“桔子”、“香蕉”都是“水果”,這里的“水果”就是一個抽象類。你可以說你喜歡吃“水果”,但你真正吃“水果”的時候,要么是“蘋果”,要么是“桔子”,要么是“香蕉”。。。。。。但你絕不可能真正吃到一個叫做“水果”的東東。 ? 從設計的角度來看,抽象類是更高層次的抽象。如果說普通類是從現實對象抽象出來的,那么抽象類就是基于類而抽象出來的。例如上面的樣例,從“蘋果”、“桔子”、“香蕉”這幾個普通類,抽象出了“水果”這個類。 ? 從實現的角度來看,抽象類與普通類不同的地方在于:抽象類有的存在抽象方法(方法只有聲明,沒有定義),子類必須自己定義這些抽象方法,而不能像普通的方法一樣,通過繼承就可以獲得父類的方法。這一點上來看,抽象類和接口有點類似。 ? **第二個問題是:抽象類和接口有什么區別,為什么有了接口,還要有抽象類?** 答案就在于:抽象類本質上還是類,強調一組事物的相似性,包括屬性和方法的相似性;而接口只強調方法的相似性,并且僅僅體現在方法聲明上的相似性,而沒有方法定義上的相似性。 ? 例如:假設我們設計一個游戲,其中使用“蘋果”、“桔子”、“香蕉”來做“補血”,“蘋果”、“桔子”、“香蕉”都有“顏色”、“重量”這樣的屬性,但每種水果的補血方式是不一樣的。這種情況下,使用抽象類可以很好的表達,我們設計一個抽象類“水果”,將“顏色”、“重量”作為“水果”的屬性,“獲取顏色”、“獲取重量”、“減少重量”等方法作為“水果”的方法,將“補血”作為“水果”的抽象方法。這樣設計能夠大大減少“蘋果”、“桔子”、“香蕉”幾個普通類的實現工作量,它們只需要實現“補血”方法,其它的屬性和方法都只需繼承“水果”類即可。而如果采用接口的方式實現,則“蘋果”、“桔子”、“香蕉”每個類都需要自己增加“顏色”、“重量”屬性,增加“獲取顏色”、“獲取重量”、“減少重量”、“補血”等方法,工作量和代碼量大大增加。 ? 綜合上述的分析,我們可以看出,抽象類看起來是一個介于類和接口之間的一個概念,同時具備類和接口的部分特性。
                  <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>

                              哎呀哎呀视频在线观看