7.1 创建内部类

img

扫码看视频

创建内部类很简单,就是在一个类中定义另外一个类,如代码7.1所示。

img

在Outer类中,我们定义了一个内部类Inner,该类有一个print方法,打印输出index变量的值,该变量是外部类Outer中定义的私有成员变量。在Outer类中同样定义了一个print方法,在该方法内部构造了一个Inner类的对象,调用该对象的print方法。接下来我们编写了一个Test类,用于测试内部类。在main方法中,构造Outer类的对象,并调用print方法。

编译Outer.java,并执行Test类,程序输出结果为:

img

o.print()方法最终调用的是内部类对象的print方法,而后者输出的是外部类对象的私有成员变量index的值。既然私有的成员变量可以在内部类中被访问到,那么外部类其他的成员变量自然也可以被访问了,也就是说,内部类可以随意地访问外部类的成员,包括成员方法和成员变量。

读者可以看一下编译Outer.java之后生成的字节码文件,你会发现有三个.class文件,前面我们说过,Java编译器会将每个类单独编译为一个字节码文件,Inner类虽然是内部类,但也会被单独编译为一个字节码文件,Outer$Inner.class就是内部类Inner的字节码文件,用$作为外部类与内部类名称的分隔。如果Inner类包含了main方法,那么要执行这个类,就直接执行java Outer$Inner即可(在Unix/Linux系统中必须转义$)。