内部类、静态内部类、局部内部类、匿名内部类

内部类

定义:在一个类的内部又定义了一个类,这个类就是内部类。

特点:

    ①内部类可以访问其所在类的属性(包括所在类的私有属性),内部类创建自身对象需要先创建其所在类的对象;

 

    ②可以定义内部接口,且可以定义另外一个内部类实现这个内部接口

    ③可以在方法体内定义一个内部类,方法体内的内部类可以完成一个基于虚方法形式的回调操作

    ④内部类不能定义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();
}

 

 

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