1.成员内部类
在一个类中除了可以定义成员变量、成员方法外,还可以定义类,这样的类称为成员内部类。成员内部类可以访问外部类的所有成员。下面通过一个案例学习如何定义成员内部类,如文件1所示。
文件1:
在 文件1中,第1~26行代码定义了一个Outer类,Outer类是一个外部类。第8~18行代码在Outer类内部定义了Inner类,Inner类是Outer类的内部类。第12行代码在内部类的show1()方法中直接访问了外部的成员变量m。在第20~25行代码中,在外部类的test2()方法中实例化内部类对象inner,通过对象inner访问了内部类的成员变量n,并调用了内部类的方法show2()。第29~32行代码分别实例化了外部类对象outer和内部类对象inner,并通过对象inner调用了方法show1(),通过对象outer调用了方法test2()。
文件1运行结果:
如果想通过外部类访问内部类,则需要通过外部类创建内部类对象,创建内部类对象的具体语法格式如下:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
2.局部内部类
局部内部类,也称为方法内部类,是指定义在某个局部范围中的类,它与局部变量一样,都是在方法中定义的,有效范围只限于方法内部。
在局部内部类中,局部内部类可以访问外部类的所有成员变量和方法,而局部内部类中变量和方法只能在所属方法中访问。下面通过一个案例学习局部内部类的定义和使用,如文件2所示。
文件2:
在文件2中,第1~21行代码定义了一个外部类Outer,并在该类中定义了成员变量m、成员方法test1()和test2()。第9~15行代码是在外部类的成员方法test2()中定义了一个局部内部类Inner;然后在局部内部类Inner中,编写了show()方法。第13~14行代码是对外部类变量和方法的调用;第17~19行代码是在test2()方法中创建了局部内部类Inner对象,并调用局部内部类的方法和变量。
文件2运行结果:结合文件2和文件2运行结果可以看出,在局部内部类Inner的show()方法中可以访问到外部成员变量m和外部成员方法test1(),而在外部访问不到 局部内部类Inner中的变量和方法。