<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國際加速解決方案。 廣告
                ## Java編程那些事兒67——this和super 陳躍峰 出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb) ### 8.8 this和super 下面再來介紹一下this和super關鍵字的使用。在程序中通過使用this和super關鍵字,可以實現對于類內部很多內容方便的引用,也有助于理解面向對象的實現原理,更方便的理解面向對象技術的內部實現。 #### 8.8.1 this關鍵字 this關鍵字代表自身,在程序中主要的使用用途有以下幾個方面: 1.? 使用this關鍵字引用成員變量 2.? 使用this關鍵字在自身構造方法內部引用其它構造方法 3.? 使用this關鍵字代表自身類的對象 4.? 使用this關鍵字引用成員方法 ##### 8.8.1.1 引用成員變量 在一個類的方法或構造方法內部,可以使用“this.成員變量名”這樣的格式來引用成員變量名,有些時候可以省略,有些時候不能省略。首先看一下下面的代碼: ~~~ ?????????????????? /** ?* 使用this引用成員變量 ?*/ public class ReferenceVariable { ?????????????????? ???????? private int a; ?????????????????? ???????? ?????????????????? ???????? public ReferenceVariable(int a){ ?????????????????? ?????????????????? this.a = a; ?????????????????? ???????? } ?????????????????? ???????? ?????????????????? ???????? public int getA(){ ?????????????????? ?????????????????? return a; ?????????????????? ???????? } ?????????????????? ???????? ?????????????????? ???????? public void setA(int a){ ?????????????????? ?????????????????? this.a = a; ?????????????????? ???????? } } ~~~ 在該代碼的構造方法和setA方法內部,都是用this.a引用類的成員變量。因為無論在構造方法還是setA方法內部,都包含2個變量名為a的變量,一個是參數a,另外一個是成員變量a。按照Java語言的變量作用范圍規定,參數a的作用范圍為構造方法或方法內部,成員變量a的作用范圍是類的內部,這樣在構造方法和setA方法內部就存在了變量a的沖突,Java語言規定當變量作用范圍重疊時,作用域小的變量覆蓋作用域大的變量。所以在構造方法和setA方法內部,參數a起作用。 這樣需要訪問成員變量a則必須使用this進行引用。當然,如果變量名不發生重疊,則this可以省略。 但是為了增強代碼的可讀性,一般將參數的名稱和成員變量的名稱保持一致,所以this的使用頻率在規范的代碼內部應該很多。 ##### 8.8.1.2 引用構造方法 在一個類的構造方法內部,也可以使用this關鍵字引用其它的構造方法,這樣可以降低代碼的重復,也可以使所有的構造方法保持統一,這樣方便以后的代碼修改和維護,也方便代碼的閱讀。 下面是一個簡單的示例: ~~~ ???????? ???????? /** ?* 使用this關鍵字引用構造方法 ?*/ public class ReferenceConstructor { ???????? int a; ???????? ???????? public ReferenceConstructor(){ ?????????????????? this(0); ???????? } ???????? ???????? public ReferenceConstructor(int a){ ?????????????????? this.a = a; ???????? } } ~~~ 這里在不帶參數的構造方法內部,使用this調用了另外一個構造方法,其中0是根據需要傳遞的參數的值,當一個類內部的構造方法比較多時,可以只書寫一個構造方法的內部功能代碼,然后其它的構造方法都通過調用該構造方法實現,這樣既保證了所有的構造是統一的,也降低了代碼的重復。 在實際使用時,需要注意的是,在構造方法內部使用this關鍵字調用其它的構造方法時,調用的代碼只能出現在構造方法內部的第一行可執行代碼。這樣,在構造方法內部使用this關鍵字調用構造方法最多會出現一次。 ##### 8.8.1.3 代表自身對象 在一個類的內部,也可以使用this代表自身類的對象,或者換句話說,每個類內部都有一個隱含的成員變量,該成員變量的類型是該類的類型,該成員變量的名稱是this,實際使用this代表自身類的對象的示例代碼如下: ~~~ ?????????????????? /** ?* 使用this代表自身類的對象 ?*/ public class ReferenceObject { ???????? ReferenceObject instance; ???????? ???????? public ReferenceObject(){ ?????????????????? instance = this; ???????? } ???????? ???????? public void test(){ ?????????????????? System.out.println(this); ???????? } } ~~~ 在構造方法內部,將對象this的值賦值給instance,在test方法內部,輸出對象this的內容,這里的this都代表自身類型的對象。 ##### 8.8.1.4 引用成員方法 在一個類的內部,成員方法之間的互相調用時也可以使用“this.方法名(參數)”來進行引用,只是所有這樣的引用中this都可以省略,所以這里就不詳細介紹了。 #### 8.8.2 super關鍵字 super關鍵字的中文意思是超級的,使用super關鍵字可以在子類中引用父類中的內容。主要的使用形式有以下幾種: 1.? 在子類的構造方法內部引用父類的構造方法 2.? 在子類中調用父類中的成員方法 3.? 在子類中調用父類中的成員變量 ##### 8.8.2.1 引用父類構造方法 在構造子類對象時,必須調用父類的構造方法。而為了方便代碼的編寫,在子類的構造方法內部會自動調用父類中默認的構造方法。但是如果父類中沒有默認的構造方法時,則必須手動進行調用。 使用super可以在子類的構造方法內部調用父類的構造方法。可以在子類的構造方法內部根據需要調用父類中的構造方法。 使用super關鍵字調用父類構造方法的示例代碼如下: ~~~ ???????? //文件名:SuperClass.java public class SuperClass { ???????? ???????? public SuperClass(){} ???????? ???????? public SuperClass(int a){} } ???????? //文件名:SubClass.java public class SubClass extends SuperClass { ???????? public SubClass(){ ?????????????????? super();? //可省略 ???????? } ???????? ???????? public SubClass(int a){ ?????????????????? super(a); ???????? } ???????? ???????? public SubClass(String s){ ?????????????????? super();? //可省略 ???????? } } ~~~ 在該示例代碼中,SubClass繼承SuperClass類,在SubClass類的構造方法內部可以使用super關鍵字調用父類SubClass的構造方法,具體調用哪個構造方法沒有限制,可以在子類內部根據需要進行調用,只是根據調用的構造方法不同傳入適當的參數即可。 由于SubClass類的父類SuperClass內部有默認的構造方法,所以SubClass的構造方法內部super()的代碼可以省略。 和使用this關鍵字調用構造方法一樣,super調用構造方法的代碼只能出現在子類構造方法中的第一行可執行代碼。這樣super調用構造方法的代碼在子類的構造方法內部則最多出現一句,且不能和this調用構造方法的代碼一起使用。 ##### 8.8.2.2 引用父類成員方法 在子類中繼承了父類中的成員方法,一般可以直接通過方法名使用,但是如果在子類中覆蓋了父類的成員方法以后,如果需要在子類內部調用父類中被覆蓋的成員方法時則不能直接調用了,這樣就又需要使用super關鍵字了。 示例代碼如下: ~~~ ?????????????????? //文件名:SuperClass2.java public class SuperClass2 { ???????? public void test(){} ???????? ???????? public void print(int a){ ?????????????????? System.out.println("SuperClass2: " + a); ???????? } } //文件名:SubClass2 public class SubClass2 extends SuperClass2 { ???????? public void print(int a){ ?????????????????? super.print(a); ?????????????????? System.out.println("SubClass2"); ???????? } ???????? ???????? public void t(){ ?????????????????? super.test();? //super可省略 ?????????????????? super.print(0); //不可省略 ???????? } } ~~~ ##### 8.8.2.3 引用父類成員變量 在子類中如果引用父類的成員變量,也可以使用“super.成員變量”來引用,只是一般成員變量的覆蓋是沒有意義的,所以這個時候都可以直接使用成員變量名進行引用,所以這里的super都可以省略。 #### 8.8.3 注意的問題 最后,在實際使用this和super時,除了上面介紹到的需要注意的問題以外,還需要特別注意的是,this和super都是非靜態的,所以這兩個關鍵字都無法在靜態方法內部進行使用。
                  <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>

                              哎呀哎呀视频在线观看