<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(){}
      }
    }

    主站蜘蛛池模板: 亚洲精品中文字幕无乱码| 亚洲成人免费电影| 99亚洲乱人伦aⅴ精品| 黄色毛片免费观看| 国产乱人免费视频| 亚洲国产精品热久久| 久久国产免费一区| 亚洲国产电影在线观看| 在线看片无码永久免费视频 | 99久久免费中文字幕精品| 精品久久香蕉国产线看观看亚洲| 好男人资源在线WWW免费| 亚洲AV无码成人网站久久精品大| 99精品视频免费在线观看| 亚洲欧洲日韩综合| 在线不卡免费视频| 久久久亚洲AV波多野结衣| 一级人做人爰a全过程免费视频| 久久久久一级精品亚洲国产成人综合AV区| 亚洲三级在线免费观看| 成人黄页网站免费观看大全| 豆国产96在线|亚洲| 国产自偷亚洲精品页65页| 精品韩国亚洲av无码不卡区| 亚洲成A∨人片天堂网无码| 亚洲国产精品无码久久98 | 久久国产精品亚洲综合| h视频在线观看免费完整版| 亚洲youwu永久无码精品| 伊人久久大香线蕉亚洲| 精品国产sm捆绑最大网免费站| 亚洲av成人一区二区三区观看在线| 亚洲中文无码永久免费| 亚洲av成人无码网站…| 亚洲美女又黄又爽在线观看| 99久久久精品免费观看国产| 特级毛片A级毛片免费播放| 中文字幕亚洲精品资源网| 国产又黄又爽又猛的免费视频播放 | 七色永久性tv网站免费看| 亚洲中文字幕无码一去台湾|