成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java系列之內部類

crelaber / 3006人閱讀

摘要:方法內部類就是局部內部類,一般定義在類的局部位置,它可以訪問當前代碼塊及外部類的所有變量。

今天溫習一下 Java 中的內部類,內部類一般有如下幾種:靜態(tài)內部類、成員內部類、匿名內部類和方法內部類,下文中將主要介紹靜態(tài)內部類和成員內部類,主要內容如下:

概述

靜態(tài)內部類

成員內部類

匿名內部類和方法內部類

總結

概述

顧名思義內部類就是在一個類內部定義的類,它是內部類是一個獨立的類,編譯之后會生成獨立的 .class 文件,其名稱前面會有外部類的類名稱以及 $ 符號,內部類同樣可以使用 private 、default、protected、public 修飾,下面是內部類的寫法,具體參考如下:

/**
 * 內部類
 * @author jzman
 */
public class OutterClass {
    //靜態(tài)內部類
    private static class StaticInnerClass{
        
    }
    //成員內部類
    private class FieldInnerClass{
        
    }
    
    //匿名內部類
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            
        }
    };
    
    private void method() {
        //方法內部類(局部內部類)
        class InnerClass{
            
        }
    }    
}
靜態(tài)內部類

靜態(tài)內部類可以有靜態(tài)成員和非靜態(tài)成員;

靜態(tài)內部類可以直接調用外部類的靜態(tài)成員和靜態(tài)方法,但不能調用外部類的非靜態(tài)成員和非靜態(tài)方法;

在不相關類中,可以直接創(chuàng)建靜態(tài)內部類的對象;

靜態(tài)內部類與其外部類聯(lián)系很少,其創(chuàng)建基本不依賴與外部類。

/**
 * 靜態(tài)內部類
 * @author jzman
 */
public class StaticInnerClassDemo {
    public static void main(String[] args) {
        //其他類可以直接創(chuàng)建某個非私有內部類的實例
        OutterClass1.InnerClass innerClassB = new OutterClass1.InnerClass();
        InnerClass innerClassA = new InnerClass();
        innerClassA.testStaticInnerClass();
        //...
    }
}

//外部類
class OutterClass1{
    //非靜態(tài)成員變量
    int ageA = 18;
    //非靜態(tài)方法
    public void methodA() {
        
    }
    
    //靜態(tài)成員變量
    static int ageB = 18;
    //靜態(tài)方法
    public static void methodB() {
        
    }
    
    private void methodC() {
        //外部類調用靜態(tài)內部類的方法
        InnerClass innerClass = new InnerClass();
        innerClass.testStaticInnerClass();
    }
    
    //靜態(tài)內部類
    static class InnerClass{
        
        public void testStaticInnerClass(){
            //靜態(tài)內部類不能訪問其外部類的非靜態(tài)成員變量和方法
//            System.out.println(ageA);
//            methodA();
            //靜態(tài)內部類可以訪問其外部類的靜態(tài)成員和方法
            System.out.println(ageB);
            methodB();
        }
    }
}
成員內部類

成員內部類可以訪問所有外部類的成員;

成員內部類對象的創(chuàng)建必須依賴于外部類對象,先有外部類才會有內部類;

成員內部類就是外部類的一個成員變量;

成員內部類不能有靜態(tài)成員,但允許常量存在。

/**
 * 成員內部類
 * @author jzman
 */
public class FieldInnerClassDemo {
    public static void main(String[] args) {
        //成員內部類依賴與其外部類,不能越過外部類直接創(chuàng)建內部類的實例
//        InnerClass innerClass = new InnerClass();
        //正確在其他類創(chuàng)建創(chuàng)建內部類的實例
        OutterClass2 outterClass2 = new OutterClass2();
        OutterClass2.InnerClass innerClass = outterClass2.new InnerClass();
        innerClass.testFieldInnerClassMethod();
    }
}

//外部類
class OutterClass2{
    //非靜態(tài)成員變量
    int ageA = 18;
    //非靜態(tài)方法
    public void methodA() {
        
    }
    
    //靜態(tài)成員變量
    static int ageB = 18;
    //靜態(tài)方法
    public static void methodB() {
        
    }
    
    private void methodC() {
        //外部類調用成員內部類的方法
        InnerClass innerClass = new InnerClass();
        innerClass.testFieldInnerClassMethod();
    }
    
    //成員內部類
    class InnerClass{
        
        //成員內部類不能有靜態(tài)成員
//        static int a = 10;
        //成員內部類允許常量形式存在
        static final int b = 10;
        
        public void testFieldInnerClassMethod(){
            //成員內部類可以直接訪問其外部類的所有成員變量及方法(靜態(tài)和非靜態(tài))
            System.out.println(ageA);
            methodA();
            System.out.println(ageB);
            methodB();
        }
    }
}
匿名內部類和方法內部類

匿名內部類當然是沒有確定的名稱,其實現(xiàn)都是在類體中具體實現(xiàn),最終返回相關類的一個匿名對象,由于最終返回的是一個匿名的實例,所以必須在匿名內部類之后添加分號。方法內部類就是局部內部類,一般定義在類的局部位置,它可以訪問當前代碼塊及外部類的所有變量。

總結

類之間的成員變量的互相調用實際上還是訪問對象的成員變量,如成員內部類能夠訪問外部類的成員變量或方法是因為內部類持有外部類的引用,一般通過 OutterClass.this 獲取外部類的對象,如果外部類想要訪問內部類的成員變量或方法當然也需要持有內部類的引用,所以外部類訪問內部類的成員變量或方法時,必須先創(chuàng)建內部類的對象,然后通過對象來方位相應的成員變量或方法。

可以選擇關注微信公眾號:jzman-blog 獲取最新更新,一起交流學習!

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/74944.html

相關文章

  • java面向對象(下)

    內部類 內部類主要作用 內部類提供了更好的封裝,可以吧內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類。 內部類成員可以直接訪問外部類的私有數(shù)據(jù),因為內部類被當成其外部類成員,同一個類的成員之間可以互相訪問,但外部類不能訪問內部類的實現(xiàn)細節(jié)。 匿名內部類適合用于創(chuàng)建那些僅需要使用一次的類。 定義內部類與外部類的語法大致相同,內部類除需要定義在其他類里面之外,還有兩點區(qū)別: 內...

    awesome23 評論0 收藏0
  • Java 抽象類、接口、內部類

    摘要:即使抽象類里不包含抽象方法,這個抽象類也不能創(chuàng)建實例抽象類可以包含成員變量方法普通方法和抽象方法構造器初始化塊內部類接口枚舉種成分。 抽象類 當編寫一個類時,常常會為該類定義一些方法,這些方法用以描述該類的行為方式,那么這些方法都有具體的方法體。但在某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但無法準確地知道這些子類如何實現(xiàn)這些方法。使用抽象方法即可滿足該要求:抽象方法是只有...

    miguel.jiang 評論0 收藏0
  • Java 基礎鞏固:內部類的字節(jié)碼學習和實戰(zhàn)使用場景

    摘要:內部類的使用場景上面介紹了中種內部類的定義,接著我們介紹這些內部類的一些使用場景。成員內部類的使用場景普通內部類可以訪問外部類的所有成員和方法,因此當類需要使用類,同時需要訪問的成員方法時,可以將作為的成員內部類。 文章出自:安卓進階學習指南 主要貢獻者: Cloud9527 Alex_趙 Struggle shixinzhang 讀完本文你將了解: [TOC] 通過反編譯...

    weij 評論0 收藏0

發(fā)表評論

0條評論

crelaber

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<