阅读量:0
在 Java 中,内部类(Inner Class)是定义在另一个类的内部的类。根据内部类与外部类的关系,可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。下面分别介绍这四种类型的定义方法。
- 成员内部类(Member Inner Class): 成员内部类是定义在外部类的成员位置上的类,它可以访问外部类的所有成员(包括私有成员)。成员内部类的定义与普通类相同,只是在类名前面加上外部类的类名即可。例如:
public class OuterClass { private int outerData = 0; public class InnerClass { public void accessOuterData() { System.out.println("outerData = " + outerData); } } }
- 局部内部类(Local Inner Class): 局部内部类是定义在方法或代码块中的类。局部内部类只能访问所在方法或代码块中的final变量(包括实际上被声明为final的变量,以及实际上没有被修改其值的变量)。局部内部类的定义与普通类相同,只是在类名前面加上外部类的类名即可。例如:
public class OuterClass { public void createLocalInnerClass() { final int localData = 0; class LocalInnerClass { public void accessLocalData() { System.out.println("localData = " + localData); } } LocalInnerClass localInner = new LocalInnerClass(); localInner.accessLocalData(); } }
- 匿名内部类(Anonymous Inner Class): 匿名内部类是没有名字的内部类,通常用于创建一次性使用的对象,例如实现接口或继承其他类。匿名内部类的定义与普通类相似,只是在类名位置使用关键字
new
,并紧接着给出类的构造函数和实现代码。例如:
public class OuterClass { public void createAnonymousInnerClass() { new Object() { public void printMessage() { System.out.println("This is an anonymous inner class."); } }.printMessage(); } }
- 静态内部类(Static Inner Class): 静态内部类是定义在外部类的静态成员位置上的类。静态内部类不能访问外部类的非静态成员,但可以通过外部类实例访问静态成员。静态内部类的定义与普通类相同,只是在类名前面加上
static
关键字。例如:
public class OuterClass { private static int outerStaticData = 0; public static class StaticInnerClass { public void accessOuterStaticData() { System.out.println("outerStaticData = " + outerStaticData); } } }