java回顾-7 内嵌类
内嵌类
在Java中,内嵌类(Nested Class)是指定义在另一个类内部的类。内嵌类可以分为以下几种类型:
静态内嵌类(Static Nested Class):
- 使用
static
关键字声明。 - 可以直接通过外部类的类名访问,不需要创建外部类的实例。
不能访问外部类的非静态成员。
1
2
3
4
5
6
7
8
9
10
11public class OuterClass {
static class StaticNestedClass {
public void display() {
System.out.println("Inside StaticNestedClass");
}
}
}
// 使用静态内嵌类
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
nestedObject.display();
- 使用
非静态内嵌类(Inner Class):
- 不使用
static
关键字声明。 - 需要通过外部类的实例来创建。
可以访问外部类的所有成员,包括私有成员。
1
2
3
4
5
6
7
8
9
10
11
12
13
14public class OuterClass {
private int value = 10;
class InnerClass {
public void display() {
System.out.println("Value is " + value);
}
}
}
// 使用非静态内嵌类
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.display();
- 不使用
局部类(Local Class):
- 定义在方法内部的类。
- 只能在该方法内部使用。
可以访问外部类的成员和方法的局部变量(必须是final或effectively final)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public class OuterClass {
private int value = 10;
public void method() {
class LocalClass {
public void display() {
System.out.println("Value is " + value);
}
}
LocalClass localObject = new LocalClass();
localObject.display();
}
}
// 使用局部类
OuterClass outerObject = new OuterClass();
outerObject.method();
匿名类(Anonymous Class):
- 没有名字的局部类。
通常用于实现接口或扩展类,并且只使用一次。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class OuterClass {
public void method() {
Runnable runnable = new Runnable() {
public void run() {
System.out.println("Inside anonymous class");
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
// 使用匿名类
OuterClass outerObject = new OuterClass();
outerObject.method();
内嵌类的主要优点包括:
- 可以实现更好的封装,将相关的类组织在一起。
- 提高代码的可读性和可维护性。
- 内嵌类可以访问外部类的私有成员。
评论