一:实例内部类与实例变量类似,可以声明为公有级别,私有级别或保护级别,即4种访问级别都可以,而外部类只能声明公有或默认级别。
实例内部类示例代码如下:
上述代码第①行声明了内部类Inner,它的访问级别是默认,这里可以是public,private和protected。内部类Inner有一个成员变量x和成员方法display().在display()方法中代码第④行是访问外部类的x成员变量,代码第⑤行和第⑥行一样都是访问内部类的x成员变量。代码第⑦行和第⑧行都是访问外部类的print()成员变方法。
提示:在内部类中this是引用当前内部类对象,见代码第⑤行,而要引用外部类对象需要使用“外部类名.this”,见代码第④行。如果内部类和外部类它们的成员命名 没有冲突情况下,在引用外部类成员时可以不用加“外部类名.this”,如代码第⑧行的print()方法只有外部类中定义,所以可以省略Outer.this.
测试内部HelloWorld代码如下:
运行结果如下:
通常情况下,使用实例成员内部类不是给外部类之外调用使用的,而就是给外部类自己使用的。但是 一定要在外部类的之外访问内部类,Java语言也是支持的,见代码第②行内部类的类型表示“外部类.内 部类”,实例化过程是先实例化外部类,再实例化内部类,outer对象是外部类实例,outer.new Inner()表 达式实例化内部类对象。 另外,HelloWorld与内部类Inner在同一个包中,内部类Inner和它的方法 display()访问级别都是默认的,它们对于在同一包中HelloWorld是可见的。
提示:内部类编译成功后生成的字节码文件是“外部类$内部类.class”。