乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java語(yǔ)法探究——從多層內(nèi)部類/嵌套的類中訪問(wèn)外部類的成員

       iversion 2008-01-15
      從多層內(nèi)部類/嵌套的類中訪問(wèn)外部類的成員

      本文用到名詞說(shuō)明:

      內(nèi)部類:Inner Class

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

      靜態(tài)內(nèi)部類:同嵌套類一個(gè)意思,一物兩個(gè)名字而已。

       

      在下面,我們看到對(duì)于B類來(lái)說(shuō)他的嵌套層次是:AcessMethod-A-B

      那么訪問(wèn)方法如下:

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

      AcessMethodA來(lái)說(shuō)對(duì)B,都是透明的,直接調(diào)用。

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

      調(diào)用代碼如下:

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

      這里很有意思的一點(diǎn),’.new’語(yǔ)法產(chǎn)生了正確的作用域。

       

      疑問(wèn):下面我們來(lái)看一下在B.h()中怎樣調(diào)用A1.g()方法?

       

      下面我們來(lái)看是否可以在B中調(diào)用A1.g()方法,在B.h()方法中原則上可以這樣調(diào)用A1.g()但是A1沒(méi)有實(shí)例化,所以這樣是錯(cuò)誤的,也就是在B中無(wú)法調(diào)用A1中的非靜態(tài)方法了。

       

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

       

      但是這是不可能的,因?yàn)樵?/span>A1.g()不可能定義為static類型,詳細(xì)看下面的問(wèn)題1問(wèn)題1:在什么情況下可以定義static 方法),這是一個(gè)缺點(diǎn)吧,但是可以使用嵌套類來(lái)解決了。

      /**
       
      從多層嵌套類中訪問(wèn)外部類的成員.  .new“語(yǔ)法產(chǎn)生了正確的作用域
       */
      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();
        }
      }

      運(yùn)行結(jié)果:h()

      g()

      f()

       

      問(wèn)題1:在什么情況下可以定義static 方法?

       

      只有在頂層類中定義,或者在靜態(tài)內(nèi)部類中定義,看下面的例子

      public class Test {
        static void t(){}
        class T2{
          //!
      錯(cuò)誤,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(){}
        }
      }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多