小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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)論公約

    類似文章 更多