10-Java內部類——成員內部類、區域性內部類、匿名內部類

懸懸小發表於2020-12-03


一.內部類

把類定義在其他類的內部,這個類就叫做內部類。

  • 根據內部類,定義位置的不同,又分為成員內部類和區域性內部類
    • 成員內部類:內部類位於外部類的成員位置
    • 區域性內部類:內部類位於外部類的成員方法內

舉例:

class A{
   //成員內部類:位於外部類的成員位置
   class B{

   }
    public void show(){
      //區域性內部類,位於外部類成員方法內
       class C{

        }
    }
}

1.成員內部類

  • 成員內部類的訪問特點

    • 內部類可以直接訪問外部類的成員,包括私有的。

    • 外部類要訪問內部類的成員,必須建立內部類物件

    • 可以在外部直接建立內部類物件,格式

外部類名.內部類名 物件名=new 外部類().new 內部類()

  • 注意

    • 類不可以私有化,但是內部類可以(經常採用的就是私有化內部類,外部間接訪問的形式,保證資料的安全性)

    • 內部類可以使用static修飾,稱為靜態內部類,其只能訪問外部類的靜態成員(方便訪問資料)

    • 外界直接建立靜態內部類的格式

Wai.Nei a=new Wai.Nei();

舉例:

public class 內部類的訪問特點 {
    public static void main(String[] args) {
        //可以在外部直接創內部類的物件
        Outer.Inner inner1=new Outer().new Inner();
        inner1.neishow();
        Outer outer=new Outer();
        outer.waishow();

    }

}
class Outer{
    int num=100;
    private int a=200;
    class Inner{
        int b=300;
        public void neishow(){
            System.out.println(b);
            //內部類可以發訪問外部類的成員,包括私有成員
            System.out.println(num);
            System.out.println(a);
            waishow1();
        }
        public void neitest(){
            System.out.println("內部類方法執行");
        }
    }
    public void waishow(){
        System.out.println("外部的show方法執行");
        //外部類訪問內部類的成員,必須建立內部類的物件
        Inner inner=new Inner();
        //通過內部類物件,訪問內部類的成員變數
        System.out.println(inner.b);
        //通過內部類物件,訪問內部類的成員方法
        inner.neitest();
    }
    private void waishow1(){
        System.out.println("外部類私有方法執行");
    }
}

2.區域性內部類

  • 區域性內部類的訪問特點
    • 可以直接訪問外部類的成員
    • 可以建立內部類物件,通過物件呼叫內部類方法,來使用內部類功能
    • 區域性內部類訪問區域性變數必須是final修飾

舉例:

public class 區域性內部類 {
    public static void main(String[] args) {
        int a=100;
        int b=200;
        Outer outer=new Outer();
        outer.waishow(100,200);

    }
}
class Outer{
    private int num=20;

    public void waishow(final int a,final int b){
        //該區域性變數需要使用final修飾
        final int num1=30;
        //區域性內部類定義在成員方法內
        class inner{
            public void neishow(){
                num=40;
                System.out.println(num);
                System.out.println(num1);
                System.out.println(a+":"+b);
            }
        }
        //建立內部類物件,呼叫內部類功能
        inner x = new inner();
        x.neishow();
    }
}

3.匿名內部類

就是區域性內部類的簡化寫法。

  • 前提:存在一個類或介面;格式:

    new 類名或者介面名(){
    重寫方法;
    } ;

  • 本質:繼承該類或實現該介面的子類匿名物件

相關文章