内部类(Inner Class)是Java中的一种特殊类,它定义在另一个类的内部。内部类可以访问其外部类的成员变量和方法,包括私有成员。这使得内部类非常适合用于封装与外部类紧密相关的逻辑。
下面是一个关于内部类的示例代码及其解释:
public class OuterClass {
private String outerField = "Outer Field";
// 内部类
public class InnerClass {
private String innerField = "Inner Field";
public void display() {
// 内部类可以访问外部类的成员变量
System.out.println("Outer field: " + outerField);
System.out.println("Inner field: " + innerField);
}
}
public static void main(String[] args) {
// 创建外部类的实例
OuterClass outer = new OuterClass();
// 创建内部类的实例
InnerClass inner = outer.new InnerClass();
// 调用内部类的方法
inner.display();
}
}
代码解释
-
外部类
OuterClass
:- 包含一个私有成员变量
outerField
。 - 包含一个内部类
InnerClass
。
- 包含一个私有成员变量
-
内部类
InnerClass
:- 包含一个私有成员变量
innerField
。 - 包含一个方法
display()
,该方法打印出外部类和内部类的成员变量。
- 包含一个私有成员变量
-
主方法
main
:- 首先创建了外部类
OuterClass
的实例outer
。 - 然后通过外部类的实例
outer
创建了内部类InnerClass
的实例inner
。注意,创建内部类实例时需要使用外部类的实例。 - 最后调用内部类实例
inner
的display()
方法,输出外部类和内部类的成员变量值。
- 首先创建了外部类
内部类的用途
- 封装性: 内部类可以将相关逻辑封装在外部类中,使代码更加模块化和清晰。
- 访问权限: 内部类可以直接访问外部类的所有成员,包括私有成员,这在某些情况下非常有用。
- 实现接口: 内部类可以实现外部类或接口,从而提供更灵活的设计。
- 回调机制: 内部类常用于实现回调机制,例如在GUI编程中处理事件监听器。
静态内部类
除了非静态内部类外,Java还支持静态内部类。静态内部类不依赖于外部类的实例,可以直接通过外部类来访问。
public class OuterClass {
private static String staticOuterField = "Static Outer Field";
// 静态内部类
public static class StaticInnerClass {
private String innerField = "Inner Field";
public void display() {
// 静态内部类只能访问外部类的静态成员变量
System.out.println("Static outer field: " + staticOuterField);
System.out.println("Inner field: " + innerField);
}
}
public static void main(String[] args) {
// 直接创建静态内部类的实例
StaticInnerClass staticInner = new StaticInnerClass();
// 调用静态内部类的方法
staticInner.display();
}
}
在这个例子中,静态内部类 StaticInnerClass
只能访问外部类的静态成员变量 staticOuterField
,而不能访问非静态成员变量。