<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國際加速解決方案。 廣告
                ### [可擴展性](https://lingcoder.gitee.io/onjava8/#/book/09-Polymorphism?id=%e5%8f%af%e6%89%a9%e5%b1%95%e6%80%a7) 現在讓我們回頭看音樂樂器的例子。由于多態機制,你可以向系統中添加任意多的新類型,而不需要修改`tune()`方法。在一個設計良好的面向對象程序中,許多方法將會遵循`tune()`的模型,只與基類接口通信。這樣的程序是可擴展的,因為可以從通用的基類派生出新的數據類型,從而添加新的功能。那些操縱基類接口的方法不需要改動就可以應用于新類。 考慮一下樂器的例子,如果在基類中添加更多的方法,并加入一些新類,將會發生什么呢: ![樂器繼承圖](https://lingcoder.gitee.io/onjava8/images/1562252767216.png) 所有的新類都可以和原有類正常運行,不需要改動`tune()`方法。即使`tune()`方法單獨存放在某個文件中,而且向**Instrument**接口中添加了新的方法,`tune()`方法也無需再編譯就能正確運行。下面是類圖的實現: ~~~ // polymorphism/music3/Music3.java // An extensible program // {java polymorphism.music3.Music3} package polymorphism.music3; import polymorphism.music.Note; class Instrument { void play(Note n) { System.out.println("Instrument.play() " + n); } String what() { return "Instrument"; } void adjust() { System.out.println("Adjusting Instrument"); } } class Wind extends Instrument { @Override void play(Note n) { System.out.println("Wind.play() " + n); } @Override String what() { return "Wind"; } @Override void adjust() { System.out.println("Adjusting Wind"); } } class Percussion extends Instrument { @Override void play(Note n) { System.out.println("Percussion.play() " + n); } @Override String what() { return "Percussion"; } @Override void adjust() { System.out.println("Adjusting Percussion"); } } class Stringed extends Instrument { @Override void play(Note n) { System.out.println("Stringed.play() " + n); } @Override String what() { return "Stringed"; } @Override void adjust() { System.out.println("Adjusting Stringed"); } } class Brass extends Wind { @Override void play(Note n) { System.out.println("Brass.play() " + n); } @Override void adjust() { System.out.println("Adjusting Brass"); } } class Woodwind extends Wind { @Override void play(Note n) { System.out.println("Woodwind.play() " + n); } @Override String what() { return "Woodwind"; } } public class Music3 { // Doesn't care about type, so new types // added to the system still work right: public static void tune(Instrument i) { // ... i.play(Note.MIDDLE_C); } public static void tuneAll(Instrument[] e) { for (Instrument i: e) { tune(i); } } public static void main(String[] args) { // Upcasting during addition to the array: Instrument[] orchestra = { new Wind(), new Percussion(), new Stringed(), new Brass(), new Woodwind() }; tuneAll(orchestra); } } ~~~ 輸出: ~~~ Wind.play() MIDDLE_C Percussion.play() MIDDLE_C Stringed.play() MIDDLE_C Brass.play() MIDDLE_C Woodwind.play() MIDDLE_C ~~~ 新方法`what()`返回一個帶有類描述的**String**引用,`adjust()`提供一些樂器調音的方法。 在`main()`方法中,當向**orchestra**數組添加元素時,元素會自動向上轉型為**Instrument**。 `tune()`方法可以忽略周圍所有代碼發生的變化,仍然可以正常運行。這正是我們期待多態能提供的特性。代碼中的修改不會破壞程序中其他不應受到影響的部分。換句話說,多態是一項“將改變的事物與不變的事物分離”的重要技術。
                  <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>

                              哎呀哎呀视频在线观看