內部類 學習記錄

1) 在外部類的非靜態方法之外創建某個內部類的對象,必須具體的指明這個對象的類型:OutClassName.InnerClassName。

public class Outer{


    class Inner{
        void show(){
            System.out.println("inner");
        }

    }

    Inner to(){
        return new Inner();
    }
    public static void main(String args[]){

        Outer outer = new Outer();

        Outer.Inner inner = outer.to();

        inner.show();
    }
}

2) 內部類擁有其外圍類(enclosing object)的所有元素的訪問權

3).this (外部類的名字 + .this 這樣生成的引用自動具有正確的類型) 與 .new(告知某些對象去創建某個內部類的對象),在擁有外部類對象之前,是不可能創建內部類的對象,因爲內部類會暗暗地鏈接都創建他的外部類對象上,如果你創建的是嵌套類那麼它就不需要外部類的引用。

public class Outer{


    class Inner{
        void show(){
            System.out.println("inner");
        }

    }

    public static void main(String args[]){

        Outer outer = new Outer();

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

        inner.show();
    }
}

4)在方法和作用域內的內部類(理由 1:你實現了某類型的接口,於是可以創建 並返回對其的引用,2: 你要解決一個複雜的問題,想創建一個類來輔助你的解決方法,但是又不希望這個類是公用的)

5)匿名內部類

interface Contents{
    int  value();
}
public class parcel {
    public Contents contents(){
        return new Contents() {
            private int value = 1;
            @Override
            public int value() {
                // TODO Auto-generated method stub
                return value;
            }       
        };
    }

}

這種語法指的是,創建一個繼承與contents類的匿名對象,是下面這種寫法的簡化形式

public class parcel {   
    public class MyContents implements Contents{

        int value = 1;

        public int value(){
            return value;
        }
    }   
}

在匿名內部類中使用一個在外部定義的對象,那麼編譯器要求其參數的引用爲final

6)嵌套類

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