<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國際加速解決方案。 廣告
                ### Pull Up Constructor Body(構造函數本體上移) 你在各個subclass 中擁有一些構造函數,它們的本體(代碼)幾乎完全一致。 在superclass 中新建一個構造函數,并在subclass 構造函數中調用它。 ~~~ class Manager extends Employee... public Manager (String name, String id, int grade) { _name = name; _id = id; _grade = grade; } ~~~ => ~~~ public Manager (String name, String id, int grade) { super (name, id); _grade = grade; } ~~~ **動機(Motivation)** 構造函數(constructors )是很奇妙的東西。它們不是普通函數,使用它們比使用普通函數受到更多的限制。 如果你看見各個subclass 中的函數有共同行為,你的第一個念頭應該是將共同行為提煉到一個獨立函數中,然后將這個函數提升到superclass 。對構造函數而言,它們彼此的共同行為往往就是「對象的建構」。這時候你需要在superclass 中提供一個構造函數,然后讓subclass 都來調用它。很多時候,「調用superclass 構造函數」就是subclass 構造函數的惟一動作。這里不能運用Pull Up Method,因為你無法在subclass 中繼承superclass 構造函數(你可曾痛恨過這個規定?)。 如果重構過程過于復雜,你可以考慮轉而使用Replace Constructor with Factory Method。 **作法(Mechanics)** - 在superclass 中定義一個構造函數。 - 將subclass 構造函數中的共同代碼搬移到superclass 構造函數中。 - 被搬移的可能是subclass 構造函數的全部內容。 - 首先設法將共同代碼搬移到subclass 構造函數起始處,然后再拷貝到superclass構造函數中。 - 將subclass 構造函數中的共同代碼刪掉,改而調用新建的superclass 構造函數。 - 如果subclass 構造函數中的所有代碼都是共同碼,那么對superclass 構造函數的調用將是subclass 構造函數的惟一動作。 - 編譯,測試。 - 如果日后subclass 構造函數再出現共同代碼,你可以首先使用 Extract Method 將那一部分提煉到一個獨立函數,然后使用Pull Up Method 將該函數上移到superclass。 **范例:(Example)** 下面是一個表示「雇員」的Employee class 禾11 一個表示「經理」的Manager class: ~~~ class Employee... protected String _name; protected String _id; class Manager extends Employee... public Manager (String name, String id, int grade) { _name = name; _id = id; _grade = grade; } private int _grade; ~~~ Employee 的值域應該在Employee 構造函數中被設妥初值。因此我定義了一個Employee 構造函數,并將它聲明為protected,表示subclass 應該調用它: ~~~ class Employee protected Employee (String name, String id) { _name = name; _id = id; } ~~~ 然后,我從中調用它: ~~~ public Manager (String name, String id, int grade) { super (name, id); _grade = grade; } ~~~ 后來情況又有些變化,構造函數中出現了共同代碼。假如我有以下代碼: ~~~ class Employee... boolean isPriviliged() {..} void assignCar() {..} class Manager... public Manager (String name, String id, int grade) { super (name, id); _grade = grade; if (isPriviliged()) assignCar(); //every subclass does this } boolean isPriviliged() { return _grade > 4; } ~~~ 我不能把調用assignCar() 的行為移到superclass 構造函數中,因為惟有把合適的值賦給_grade 值域后才能執行assignCar() 。此時我需要Extract Method 和 Pull Up Method。 ~~~ class Employee... void initialize() { if (isPriviliged()) assignCar(); } class Manager... public Manager (String name, String id, int grade) { super (name, id); _grade = grade; initialize(); } ~~~
                  <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>

                              哎呀哎呀视频在线观看