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, 没有构造方法。匿名内部类隐式地继承了一个父类或者实现了一个接口。通常是作为一个方法参数。