6.7.2 内部类的特性

6.7.2 内部类的特性

在外部类中声明了一个内部类之后,外部类与内部类之间构成嵌套结构,那么两者之间的访问规则是怎样的?外部类中怎样访问内部类,内部类中可以访问外部类的成员吗?这些问题的解决依赖于内部类的下述特性来解决。

1.内部类的类名只能在外部类或语句块之内

在外部引用内部类时必须给出完整的名称,且内部类的名称不能与包含它的外部类类名相同。对于例6-5,外部类Person声明内部类Dealer,在外部类Person的方法中可以使用内部类名Dealer创建内部类的对象,而在外部类的main()方法或其他类中,则必须使用完整的内部类标识Person.Dealer。

2.内部类作为外部类的成员

Java将内部类作为外部类的一个成员,就如同成员变量和成员方法。可以在一个方法中声明一个内部类。只有内部类能被声明为private或protected。

因此,外部类与内部类的访问原则是:在外部类中,通过一个内部类的对象引用内部类中的成员;反之,在内部类中可以直接引用它的外部类的成员,包括静态成员、实例成员和私有成员。

3.内部类与外部类的成员同名问题

Java允许外部类与内部类各自有自己的成员,并且不同类的成员可以同名。例6-9演示了内部类与外部类的成员同名时,通过不同类的对象语句不同的成员。