內部類、靜態內部類、局部內部類、匿名內部類

內部類

定義:在一個類的內部又定義了一個類,這個類就是內部類。

特點:

    ①內部類可以訪問其所在類的屬性(包括所在類的私有屬性),內部類創建自身對象需要先創建其所在類的對象;

 

    ②可以定義內部接口,且可以定義另外一個內部類實現這個內部接口

    ③可以在方法體內定義一個內部類,方法體內的內部類可以完成一個基於虛方法形式的回調操作

    ④內部類不能定義static元素

    ⑤內部類可以多嵌套

public class Coder {

    public  int num=1;
    public  void Paint()
    {
        System.out.println("Paint");
    }
    public  class InnerClass{
        public  void method()
        {
            Paint();
            System.out.println("hello"+num);
        }
    }
    public static void main(String [] args){

        Coder.InnerClass innerClass=new Coder().new InnerClass();
        innerClass.method();
    }
}

靜態內部類

位置:定義在成員位置上,使用static修飾。

特點:

①靜態內部類如果要訪問外部的成員變量或成員方法,那麼必須是靜態的;

②會生成兩個.class文件,一個是外部類Outer.class,另一個是Outer$Inner.class

public class Coder {

    public static int num=1;
    public static void Paint()
    {
        System.out.println("Paint");
    }
    public static class InnerClass{
        public  void method()
        {
            Paint();
            System.out.println("hello"+num);
        }
    }
    public static void main(String [] args){

        Coder.InnerClass innerClass=new Coder.InnerClass();
        innerClass.method();
    }
}

局部內部類

位置:在一個類的成員方法中

特點:①不能使用任何的訪問修飾符

            ②會生成兩個.class文件,一個是Outer.class,一個是IOuter$LocalInner.class

            ③局部內部類智能訪問方法中聲明的final類型的變量

匿名內部類

定義:一個繼承了該類或者實現了該接口的子類匿名對象

public class Coder {
    public void method(){
        new Inner(){
            public void info(){
                System.out.println("hello");
            }
        }.info();
    }
    public static void main(String [] args){

        Coder coder=new Coder();
        coder.method();
    }
}
interface Inner{
    public void info();
}

 

 

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