<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网站| 永久免费观看的毛片的网站| 中文字幕日本人妻久久久免费| 全免费a级毛片免费看| 欧美日韩国产免费一区二区三区 | 亚洲av无码兔费综合| 国产在线国偷精品免费看| 黄色网页在线免费观看| 日韩精品无码区免费专区| 亚洲第一香蕉视频| 亚欧乱色国产精品免费视频| 四虎国产精品免费久久| 亚洲女久久久噜噜噜熟女| 亚洲国产成人久久一区二区三区 | 亚洲一级高清在线中文字幕| 九九免费精品视频在这里| 最近免费中文字幕大全视频| 亚洲AV无码久久精品成人| 羞羞漫画小舞被黄漫免费| 国产麻豆视频免费观看| 亚洲人成无码网站在线观看| 久久国产精品成人片免费| 亚洲av永久无码精品天堂久久| 青青久在线视频免费观看| 色偷偷亚洲男人天堂| 女人18毛片水真多免费看 | 午夜私人影院免费体验区| 男性gay黄免费网站| 99久久免费精品国产72精品九九 | 波多野结衣免费一区视频| 亚洲第一网站免费视频| 免费无码A片一区二三区| 污污视频免费观看网站| 国产极品粉嫩泬免费观看| 中文字幕 亚洲 有码 在线| 天天影院成人免费观看| 亚洲色图在线观看| 98精品全国免费观看视频| 亚洲一卡2卡三卡4卡有限公司| a毛片免费在线观看| 亚洲一区二区久久|