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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## [組合與繼承的選擇](https://lingcoder.gitee.io/onjava8/#/book/08-Reuse?id=%e7%bb%84%e5%90%88%e4%b8%8e%e7%bb%a7%e6%89%bf%e7%9a%84%e9%80%89%e6%8b%a9) 組合和繼承都允許在新類中放置子對象(組合是顯式的,而繼承是隱式的)。你或許想知道這二者之間的區別,以及怎樣在二者間做選擇。 當你想在新類中包含一個已有類的功能時,使用組合,而非繼承。也就是說,在新類中嵌入一個對象(通常是私有的),以實現其功能。新類的使用者看到的是你所定義的新類的接口,而非嵌入對象的接口。 有時讓類的用戶直接訪問到新類中的組合成分是有意義的。只需將成員對象聲明為**public**即可(可以把這當作“半委托”的一種)。成員對象隱藏了具體實現,所以這是安全的。當用戶知道你正在組裝一組部件時,會使得接口更加容易理解。下面的 car 對象是個很好的例子: ~~~ // reuse/Car.java // Composition with public objects class Engine { public void start() {} public void rev() {} public void stop() {} } class Wheel { public void inflate(int psi) {} } class Window { public void rollup() {} public void rolldown() {} } class Door { public Window window = new Window(); public void open() {} public void close() {} } public class Car { public Engine engine = new Engine(); public Wheel[] wheel = new Wheel[4]; public Door left = new Door(), right = new Door(); // 2-door public Car() { for (int i = 0; i < 4; i++) { wheel[i] = new Wheel(); } } public static void main(String[] args) { Car car = new Car(); car.left.window.rollup(); car.wheel[0].inflate(72); } } ~~~ 因為在這個例子中 car 的組合也是問題分析的一部分(不是底層設計的部分),所以聲明成員為**public**有助于客戶端程序員理解如何使用類,且降低了類創建者面臨的代碼復雜度。但是,記住這是一個特例。通常來說,屬性還是應該聲明為**private**。 當使用繼承時,使用一個現有類并開發出它的新版本。通常這意味著使用一個通用類,并為了某個特殊需求將其特殊化。稍微思考下,你就會發現,用一個交通工具對象來組成一部車是毫無意義的——車不包含交通工具,它就是交通工具。這種“是一個”的關系是用繼承來表達的,而“有一個“的關系則用組合來表達。
                  <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>

                              哎呀哎呀视频在线观看