Java內部類知識整理

一、內部類

將類定義在其他類的內部(成員位置或局部位置),此種方式定義的類稱之爲內部類。定義在成員位置的類稱之爲成員內部類。定義在局部位置的類稱之爲局部內部類。

成員內部類可以使用成員修飾符,如public、private、static等等。它也是個類,可以繼承、實現接口等。

內部類可以使用外部的成員,包括私有的。但是外部類要使用內部類的成員,必須要創建內部類對象。

創建內部類對象格式:

外部類類名.內部類類名 變量 = new 外部類().new 內部類();

例:

//外部類
public class Outer {

    //成員內部類
     class Inner{
        public Inner(){
            System.out.println("我是成員內類的構造方法!");
        }
        //成員內部類方法
        public void innerFun(){
            System.out.println("我是成員內部類的方法!");
        }
    }

}
//定義測試類
class Test{
    public static void main(String[] args){
        //創建成員內部類對象
        Outer.Inner oi = new Outer().new Inner();
        //調用內部類方法
        oi.innerFun();
    }
}

局部內部類,要想使用其中的成員,要在成員方法中創建局部內部類對象,然後調用其成員。

例:

//外部類
public class Outer {

    //成員方法
    public void fun(){
        //局部內部類
        class Inner{
            public Inner(){
                System.out.println("我是局部內部類的構造方法!");
            }
            //局部內部類的方法
            public void sectionInnerFun(){
                System.out.println("我是局部內部類的成員方法!");
            }
        }
        //創建局部內部類對象
        Inner in = new Inner();
        //調用其成員方法
        in.sectionInnerFun();
    }

}
//定義測試類
class Test{
    public static void main(String[] args){
        //創建外部類對象,調用成員方法即可
        new Outer().fun();

    }
}

二、匿名內部類

匿名內部類是局部內部類的一種,是創建某個類型的子類對象的便捷方式,其不能有構造方法。

格式:

new 接口或父類(){
    重寫抽象方法
};

例:

//定義“人”類接口
public interface Person {
    //定義抽象方法eat
    public void eat();
    //定義抽象方法 sleep
    public void sleep();
}




public class MyTest {

    public static void main(String[] args){
        //使用匿名內部類方式創建實現類對象,以下是多態體現,父類引用指向子類對象(new 關鍵開始到分號結束 爲子類對象)
        Person p = new Person(){
            //實現接口中的所有抽象方法
            @Override
            public void eat() {
                System.out.println("吃飯!");
            }
            @Override
            public void sleep() {
                System.out.println("睡覺!");
            }
        };
        //調用重寫後的方法
        p.eat();
        p.sleep();
    }
}

 

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