Java中的內部類 + 匿名內部類

學習:僅總結語法
內部類就是在一個類中定義一個類.
1、內部類的訪問特點:
內部類可以直接訪問外部類的成員,包括私有
外部類要訪問內部類的成員,必須創建對象

2、內部類的分類:
按照內部類在類中定義的位置不同,可以分爲如下兩種方式

  • 在類的成員位置:成員內部類
  • 在類的局部位置:局部內部類(類定義在方法中),匿名內部類是局部內部類的一種特殊形式.

3、成員內部類,外界如何創建對象使用?
格式:外部類名.內部類名 對象名 = 外部類對象.內部類對象
Outer.Inner oi = new Outer().new Inner();

一、成員內部類

如果是私有的成員內部類,外界無法直接訪問。在方法內創建成員內部類對象調方法,通過外部類對象調用成員方法

public class Outer {
    private int num = 10;

    //私有的成員內部類
    private class Inner{
       public  void show(){
           System.out.println(num);
       }
    }

    public void method(){
        //調用成員內部類,創建對象
        Inner i =new Inner();
        //在外界無法訪問私有的,但是在同一個類中可以訪問私有的類
        i.show();

    }
}
//測試類
public class OuterDemo {
    public static void main(String[] args) {
        Outer oi = new Outer();
        oi.method();
    }

}

二、局部內部類

局部內部類是在方法中定義的類,所以局部內部類方法調用外界是無法直接使用,也是間接調用,通過外部類對象調用成員方法,在方法內創建局部內部類對象調方法
局部內部類類可以直接訪問外部類的成員,也可以直接訪問方法內的成員變量

//局部內部類
public class Outer {
    private int num = 10;
    public void method(){
        int num2 = 20;
        //局部內部類
        class Inner {
            public void show() {
                System.out.println(num);
                System.out.println(num2);
            }
        }
        //局部內部類方法調用也是間接調用,通過外部類對象調用成員方法,在方法內部創建局部內部類對象調方法
        Inner i = new Inner();
        i.show();
    }
}
//測試類
public class OuterDemo {
    public static void main(String[] args) {
    Outer oi = new Outer();
    oi.method();
    }
}

三、匿名內部類

前提:存在一個類或者接口,這裏的類可以是具體類也可以是抽象類

public class Outer {

    public void method() {
     /*
     //匿名內部類
     new Inter(){//new應該是一個對象,所以是匿名的對象。匿名內部類本質是匿名的對象
          @Override
          public void show() {
              System.out.println("匿名內部類");
          }
      }.show(); //.show()對象調方法
       */

        //多次調用匿名內部類
        Inter i = new Inter() {//new應該是一個對象,所以是匿名的對象。匿名內部類本質是匿名的對象
            @Override
            public void show() {
                System.out.println("匿名內部類");
            }
        };

        i.show();
        i.show();
        i.show();
    }
}
//測試類
public class OuterDemo {
    public static void main(String[] args) {
    Outer oi = new Outer();
    oi.method();
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章