什么是内部类? Static Nested Class 和 Inner Class的不同?

内部类就是在一个类的内部定义的类,内部类中不能定义静态成员。

内部类作为其外部类的一个成员,因此内部类可以直接访问外部类的成员。但有一点需要指出:静态成员不能访问非静态成员,因此静态内部类不能访问外部类的非静态成员。

如果内部类使用了static修饰,那这个内部类就是静态内部类,也就是所谓的static Nested Class;如果内部类没有使用修饰,它就是Inner Class。除此之外,还有一种局部内部类:在方法中定义的内部类就是局部内部类,局部内部类只在方法中有效。

对于Static Nested Class来说,它使用了static修饰,因此它属于类成员,Static Nested Class的实例只要寄生在外部类中即可。因此使用Static Nested Class十分方便,开发者可以把外部类当成Static Nested Class的一个包即可。

对于Inner Class而言,它是属于实例成员,因此Inner Class的实例必须寄生在外部类的实例中,因此程序在创建Inner Class实例之前,必须先获得一个它所寄生的外部类的实例。否则程序无法创建Inner Class的实例。例如如下代码:

class Outer

{

class Inner

{

}

}

public class Test

{

public static void main(String[] args)

{

Outer.Inner inner;

Outer outer = new Outer();

// 必须先获得外部类的实例,然后才能调用构造器。

inner = outer.new Inner();

}

}

原文地址:https://www.cnblogs.com/programb/p/14068471.html