<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Asktalk

    天行健,君子以自強不息!
    posts - 21, comments - 79, trackbacks - 0, articles - 2
      BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理
    從多層內部類/嵌套的類中訪問外部類的成員

    本文用到名詞說明:

    內部類:Inner Class

    嵌套類:Static Nested Class (與標題上的嵌套的類不同,此處是專有名詞)

    靜態內部類:同嵌套類一個意思,一物兩個名字而已。

     

    在下面,我們看到對于B類來說他的嵌套層次是:AcessMethod-A-B

    那么訪問方法如下:

    class B {
          void h() {
            System.out.println("h()");
            g();
            f();
          }

    AcessMethodA來說對B,都是透明的,直接調用。

    嵌套類實例化的順序:有外到里!AcessMethod-A-B

    調用代碼如下:

        AcessMethod am = new AcessMethod();
        AcessMethod.A a = am.new A();
        AcessMethod.A.B b = a.new B();
        b.h();

    這里很有意思的一點,’.new’語法產生了正確的作用域。

     

    疑問:下面我們來看一下在B.h()中怎樣調用A1.g()方法?

     

    下面我們來看是否可以在B中調用A1.g()方法,在B.h()方法中原則上可以這樣調用A1.g()但是A1沒有實例化,所以這樣是錯誤的,也就是在B中無法調用A1中的非靜態方法了。

     

    假設:如果A1.g()static類型,那么在B中可以這樣調用A1種的方法:A1.this.g()

     

    但是這是不可能的,因為在A1.g()不可能定義為static類型,詳細看下面的問題1問題1:在什么情況下可以定義static 方法),這是一個缺點吧,但是可以使用嵌套類來解決了。

    /**
     
    從多層嵌套類中訪問外部類的成員.  .new“語法產生了正確的作用域
     */
    public class AcessMethod {

      private void f() {
        System.out.println("f()");
      }


      class A1 {
        private void g() {
          System.out.println("A1 - g()");
        }

    }


      class A {
        private void g() {
          System.out.println("g()");
        }

        class B {
          void h() {
            System.out.println("h()");
            g();
            f();
          }
        }
      }

      public static void main(String[] args) {
        AcessMethod am = new AcessMethod();
        AcessMethod.A a = am.new A();
        AcessMethod.A.B b = a.new B();
        b.h();
      }
    }

    運行結果:h()

    g()

    f()

     

    問題1:在什么情況下可以定義static 方法

     

    只有在頂層類中定義,或者在靜態內部類中定義,看下面的例子

    public class Test {
      static void t(){}
      class T2{
        //!
    錯誤,The method a cannot be declared static; 
        //static methods can only be declared in a static or top level type
        //static void a(){}
      }

    static class T3{
            static void a(){}
      }
    }

    主站蜘蛛池模板: 国产成人无码精品久久久免费| 亚洲中文字幕AV在天堂| 久久免费精彩视频| 亚洲人成高清在线播放| 全黄性性激高免费视频| 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲偷自拍拍综合网| 中文字幕在线免费观看| 亚洲AV综合永久无码精品天堂| 亚洲午夜国产精品无码老牛影视| 麻花传媒剧在线mv免费观看| WWW亚洲色大成网络.COM | 一级毛片一级毛片免费毛片| 亚洲综合一区二区| 日韩精品成人亚洲专区| 国产成人精品一区二区三区免费| 蜜桃传媒一区二区亚洲AV | 亚洲精华国产精华精华液好用| 亚洲成AV人片在| 免费观看一级毛片| 日本在线看片免费人成视频1000| 国产精品亚洲а∨天堂2021| 亚洲理论片在线观看| 亚洲精品午夜无码专区| 日韩免费视频网站| 在线观看永久免费| 中文字幕无线码中文字幕免费| 亚洲爆乳无码专区www| 亚洲欧洲日本国产| 亚洲精品白浆高清久久久久久| 国产男女猛烈无遮挡免费网站| 久久福利资源网站免费看| 丁香花在线视频观看免费| 国产亚洲精品成人久久网站| 亚洲男人天堂2018av| 久久国产亚洲精品无码| 亚洲精品成人无限看| 久久久久国产成人精品亚洲午夜| 午夜爱爱免费视频| 日韩精品无码区免费专区| 精品免费人成视频app|