JAVA學習——內部類

JAVA學習——內部類


一、內部類的訪問規則。

1、  內部類可以直接訪問外部類的成員,包括私有成員,原因是:內部類中持有一個外部類的引用,格式爲:外部類名.this

2、  外部類訪問內部類必須建立內部類對象。

3、  當內部類定義在直接外部類的成員位置上,而且是非私有成員,可以在間接外部類中引用內部類,其格式爲:直接外部類名.內部類名 對象名= new直接外部類構造函數名.new 內部類構造函數名,形如Outer.Inner inner = new Outer().new Inner();

4、  在成員位置上的內部類可以被可以被成員修飾符修飾,比如:private static(當內部類被其修飾,則內部類只能訪問直接外部類的靜態成員)等內部類相當於外部類的一個成員。內部類有static修飾時則內部類必須是static

5、  當內部類定義在局部時,1)、不可以被成員修飾符修飾。2)、可以直接訪問外部類中的成員,因爲該內部類還持有外部類的引用。但不可以訪問它所在的局部中的變量,只能訪問被final修飾的局部變量。

實例演示:

package com.abin;

class Outer{

    //定義外部內的私有成員

    private int x=2;

    //創建內部類

    class Inner{

        //定義內部類的私有成員

        private int x = 4;

        public void show(){

            int x = 6;

            System.out.println("您正在訪問內部類的show()方法");

            System.out.println("在內部類Inner的方法show()中調用方法內部成員x="+x);

            System.out.println("在內部類Inner的方法show()中調用內部類私有成員x="+this.x);

            System.out.println("在內部類Inner的方法show()中調用外部類的私有成員x="+Outer.this.x);

        }

    }

    public void show(){

        System.out.println("您正在訪問外部類的show()方法");

        //在外部類中訪問內部類需要建立內部類的對象

        Inner inner = new Inner();

        inner.show();

    }

   

}

public class InnerClass {

    public static void main(String[] args) {

        //實例化外部類

        Outer outer = new Outer();

        //調用外部類方法

        outer.show();

        //直接實例化內部類

        Outer.Inner inner = new Outer().new Inner();

        System.out.println("通過內部類實例化的對象調用內部類方法show():");

        inner.show();

    }

}

二、匿名內部類

1、匿名內部類其實就是內部類的簡寫格式。

2、定義內部類的前提:內部類必須是繼承一個類或者實現接口。

3、匿名內部類的格式:new 父類或者接口名(){定義子類的內容}

4、其實匿名內部類就是一個匿名子類對象。

示例代碼:

package com.abin;

interface inner{

    void method();

}

class OuterA{

   

    static inner show(){

        return new inner() {

            @Override

            public void method() {

                System.out.println("method:嘿,陳從賓我是你定義的匿名內部類中的方法");

            }

        };

    }

}

public class InnerClass2 {

    public static void main(String[] args) {

        OuterA.show().method();

        show(new inner() {

            @Override

            public void method() {

                System.out.print("method:嘿,陳從賓你以接口作爲參數成功¡¤¡¤¡¤");

            }

        });

    }

   

    public static void show(inner in) {

        in.method();

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章