内部类

1、静态内部类Static Inner Class

被编译成一个完全独立的.class文件,名称为OuterClass$InnerClass.class的形式。只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。

public class StaticInner{
    private static int a = 2;
    // static inner class
    public static class Inner{
        public void test(){
            // 静态内部类只能访问外部类的静态成员
            System.out.println(a);
        }
    }
}

public class StaticInnerClassTest{
    public static void main(String[] args){
        // 创建静态内部类方式
        StaticInner.Inner inner = new StaticInner.Inner();
        inner.test();
    }
}

2、成员内部类 Member Inner Class

可以访问它的外部类的所有成员变量和方法。在外部类里面创建成员内部类的实例:this.new Innerclass();  

public MemberInner{
    private int b = 1;
    private int a = 2;
    
    // 成员内部类
    public class Inner{
        private int a = 3;
        public void doSomething(){
            System.out.println(b); // 直接访问外部类成员变量
            System.out.println(a); // 访问的是内部类里的a
            System.out.println(MemberInner.this.a); // 访问的是外部类里的a
        }
    }
}

public class MemberInnerClassTest{
    public static void main(String[] args){
        // 创建成员内部类方式
        MemberInner.Inner inner = new MemberInner().new Inner();
        inner.doSomething();
    }
}

3、匿名内部类 Anonymous Inner Class

匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。匿名内部类隐式地继承了一个父类或者实现了一个接口。通常是作为一个方法参数。

原文地址:https://www.cnblogs.com/hesier/p/5640761.html