阅读量:60
在Java中,内部类(Inner Class)是定义在另一个类(外部类)内部的类。内部类可以访问外部类的成员(包括私有成员),而外部类也可以访问内部类的成员。内部类可以分为四种类型:
- 非静态内部类(Non-static Inner Class):这是最常见的内部类类型。非静态内部类与外部类的实例关联,因此需要先创建外部类的实例才能创建内部类的实例。非静态内部类可以访问外部类的所有成员(包括私有成员)。
public class OuterClass {
private int outerVar;
public class InnerClass {
public void accessOuterMembers() {
System.out.println("Accessing outer class variable: " + outerVar);
}
}
}
- 静态内部类(Static Inner Class):静态内部类与外部类的实例无关,因此不需要创建外部类的实例就可以创建内部类的实例。静态内部类只能访问外部类的静态成员。
public class OuterClass {
private static int outerVar;
public static class InnerClass {
public void accessOuterMembers() {
System.out.println("Accessing outer class static variable: " + outerVar);
}
}
}
- 局部内部类(Local Inner Class):局部内部类是在方法内部或者代码块内部定义的类。局部内部类只能在定义它的方法或代码块内部使用。局部内部类可以访问定义它的方法或代码块中的局部变量(如果这些变量被声明为
final或者是实际上的final变量)。
public class OuterClass {
public void createLocalInnerClass() {
final int localVar = 10;
class LocalInnerClass {
public void accessLocalVar() {
System.out.println("Accessing local variable: " + localVar);
}
}
LocalInnerClass localInner = new LocalInnerClass();
localInner.accessLocalVar();
}
}
- 匿名内部类(Anonymous Inner Class):匿名内部类是没有名字的内部类,通常用于实现接口或继承类的子类。匿名内部类可以访问定义它的方法或代码块中的局部变量(同样需要声明为
final或实际上的final变量)。
public class OuterClass {
public void createAnonymousInnerClass() {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Anonymous inner class running.");
}
};
new Thread(runnable).start();
}
}
总之,Java中的内部类提供了一种在类内部定义和使用其他类的方式,可以更好地组织和封装代码。