Java中的内部类共分为四种:
静态内部类static inner class (also called nested class)
成员内部类memberinner class
局部内部类localinner class
匿名内部类anonymous inner class
静态内部类:
只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法
静态内部类与静态内部方法相似,只能访问外部类的static成员,不能直接访问外部类的实例变量与实例方法,只有通过对象引用才能访问。
由于static内部类不具有任何对外部类实例的引用,因此static内部类中不能使用this关键字来访问外部类中的实例成员,但是可以访问外部类中的static成员
静态内部类的对象可以直接生成:Outer.Inner in = newOuter.Inner();
成员内部类:
成员内部类就像一个实例变量。
它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以。
在外部类内部创建成员内部类的实例:
this.new Innerclass();
在外部类之外创建内部类的实例:
(new Outerclass()).new Innerclass();
在内部类里访问外部类的成员:
Outerclass.this.member
局部内部类:
局部内部类定义在方法中,比方法的范围还小。是内部类中最少用到的一种类型。
像局部变量一样,不能被public, protected, private和static修饰。
只能访问方法中定义的final类型的局部变量。
局部内部类在方法中定义,所以只能在方法中使用,即只能在方法当中生成局部内部类的实例并且调用其方法
static方法中定义的内部类可以访问外部类定义的static成员
匿名内部类:
匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements,没有构造方法。
匿名内部类隐式地继承了一个父类或者实现了一个接口。
匿名内部类使用得比较多,通常是作为一个方法参数。