靜態(tài)成員類和非靜態(tài)成員類有什么區(qū)別?什么是匿名內(nèi)部類?(轉(zhuǎn))

1、靜態(tài)內(nèi)部類(static inner classes)
最簡單的內(nèi)部類。只能訪問外部類的靜態(tài)成員變量與靜態(tài)方法。生成靜態(tài)內(nèi)部類對象的方法:OuterClass.InnerClass inner = new OuterClass.InnerClass();

1.1、相關(guān)使用例子:

靜態(tài)內(nèi)部類:

class StaticInner{
    private static int a = 1;

    /**
   * 靜態(tài)內(nèi)部類
   * 生成的類名:StaticInner$InnerClass
   */
    public static class InnerClass{
        //靜態(tài)內(nèi)部類可以聲明靜態(tài)的成員變量,其他的內(nèi)部類不可以
        private static int b = 1;
        public void execute(){
            //靜態(tài)內(nèi)部類只能訪問靜態(tài)程序
            System.out.println(a + b);
        }
    }
}

main方法中使用:

 public static void main(String[] args) {
 //創(chuàng)建靜態(tài)內(nèi)部類
 StaticInner.InnerClass innerClass = new StaticInner.InnerClass();
  innerClass.execute();
 }

2、成員內(nèi)部類(member inner classes):
成員內(nèi)部類可以訪問外部類的靜態(tài)與非靜態(tài)的方法和成員變量。
生成成員內(nèi)部類對象的方法:OuterClass.InnerClass inner = new OuterClass().new InnerClass();
在局部內(nèi)部類中訪問外部類的成員變量的方法:OuterClass.this.a;

2.1、相關(guān)使用例子:
成員內(nèi)部類:

class MemberInner{
    private int a = 1;

    public void execute(){
        //在外部類中創(chuàng)建成員內(nèi)部類
        InnerClass innerClass = this.new InnerClass();
    }

    /**
 * 成員內(nèi)部類
 */
    public class InnerClass{

        //內(nèi)部類可以創(chuàng)建與外部類同名的成員變量
        private int a = 2;

        public void execute(){
            //this引用的是內(nèi)部類
            System.out.println(this.a);
            //在內(nèi)部了中使用外部類的成員變量的方法
            System.out.println(MemberInner.this.a);
        }
    }
}

在main方法中使用:

 public static void main(String[] args) {
 //創(chuàng)建成員內(nèi)部類
 MemberInner.InnerClass innerClass = new MemberInner().new InnerClass();
  innerClass.execute();
 }

3、局部內(nèi)部類(local inner classes):
類似于局部變量,不能定義為public,protected,private或者static類型。
定義方法中,只能方法中聲明為final類型的變量。
3.1、相關(guān)使用例子:
局部內(nèi)部類:

class LocalInner{

    public void execute(){
        final int a = 1;
        /**
 * 創(chuàng)建局部內(nèi)部類
 */
        class InnerClass{
            public void execute(){
                System.out.println("LocalInner Class");

                //局部內(nèi)部類只能訪問final類型的變量
                System.out.println(a);
            }
        }
        //只能在所在方法區(qū)域創(chuàng)建
        new InnerClass().execute();
    }
}

在main方法中使用:

 public static void main(String[] args) {
 //外部不能直接創(chuàng)建局部內(nèi)部類
 LocalInner localInner = new LocalInner();
  localInner.execute();
 }

4、匿名內(nèi)部類(anonymous inner classes):
匿名內(nèi)部類沒有類名,沒有class關(guān)鍵字也沒有extends和implements等關(guān)鍵字修飾。
匿名內(nèi)部類會隱式地繼承一個父類或?qū)崿F(xiàn)一個接口。
4.1、相關(guān)使用例子:

public static void main(String[] args) {
    AnonymousInnerClassTest test = new AnonymousInnerClassTest();

    /**
 * 創(chuàng)建匿名內(nèi)部類
 * 生成的類名:AnonymousInnerClassTest$1
 */
    test.print(new Date(){
        //重寫toString()方法
        @Override
        public String toString() {
            return "Hello world.";
        }
    });

    JButton button = new JButton();

    /**
 * 創(chuàng)建匿名內(nèi)部類
 * 該匿名內(nèi)部類實(shí)現(xiàn)ActionListener接口
 * 生成的類名:AnonymousInnerClassTest$1
 */
    button.addActionListener(new ActionListener(){
        //實(shí)現(xiàn)接口中的方法
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("使用匿名內(nèi)部類實(shí)現(xiàn)ActionListener接口");
        }
    });
}

public void print(Date date){
    System.out.println(date);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java 內(nèi)部類 分四種:成員內(nèi)部類、局部內(nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類。 1、成員內(nèi)部類: 即作為外部類的一個成...
    ikaroskun閱讀 1,349評論 0 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,637評論 18 399
  • 今天整理一下內(nèi)部類,其中包含了內(nèi)部類的特殊形式,對比普通類有什么區(qū)別和作用,內(nèi)部類和外圍類之間的聯(lián)系,內(nèi)部類的擴(kuò)展...
    _小二_閱讀 812評論 0 3
  • Advanced Language Features 知識點(diǎn):一. static修飾符 static修飾符可以用來...
    風(fēng)景涼閱讀 505評論 0 0
  • 表層習(xí)慣完成情況:早起(高)聽力(中)閱讀(低) 明確方向擺正心態(tài)擼起袖子干 好好加油 可以的, 明天四級加油 晚安
    呀呀呀呀呀dream閱讀 245評論 0 0

友情鏈接更多精彩內(nèi)容