1、成员内部类
例子:
class Outer {
private int num = 4; // 定义类的成员变量
// 下面的代码定义了一个成员方法,方法中访问内部类
public void test() {
Inner inner = new Inner();
inner.show();
}
// 下面的代码定义了一个成员内部类
class Inner {
void show() {
// 在成员内部类的方法中访问外部类的成员变量
System.out.println("num = " + num);
}
}
}
public class Text {
public static void main(String[] args) {
Outer outer = new Outer(); // 创建外部类对象
outer.test(); // 调用 test() 方法
}
}
运行上面代码就可以在控制台输出“num = 4”,可以看出,内部类可以在外部内中被使用,并能访问外部类的成员。如果想通过外部类去访问内部类,则需要通过外部类对象创建内部类对象,创建内部类对象开语法如下:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
例:
public class Example17 {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner(); // 创建内部类对象
inner.show(); // 调用 test() 方法
}
}
2、静态内部类
可以使用static关键字修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化。创建静态内部类对象的语法如下:
外部类名.内部类名 变量名 = new 外部类名.内部类名();
例:
class Outer {
private static int num = 6;
// 下面的代码定义了一个静态内部类
static class Inner {
void show() {
System.out.println("num = " + num);
}
}
}
class Text{
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner(); // 创建内部类对象
inner.show(); // 调用内部类的方法
}
}
注意:
A:在静态内部类中只能访问外部类的静态成员,如上例子第2行代码定义的变量num前面static去掉,编译就会出错
B:在静态内部类中可以定义静态的成员,而在非静态的内部类中部允许定义静态的成员。
3)、方法内部类
方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。方法内部类可以访问外部类成员。
class Outer {
private int num = 4; // 定义成员变量
public void test() {
// 下面是在方法中定义的内部类
class Inner {
void show() {
System.out.println("num = " + num); // 访问外部类的成员变量
}
}
Inner in = new Inner(); // 创建内部类对象
in.show(); // 调用内部类的方法
}
}
public class Text{
public static void main(String[] args) {
Outer outer = new Outer(); // 创建外部类对象
outer.test(); // 调用 test() 方法
}
}