局部内部类,匿名内部类
时间: 2024-12-28 10:28:46 浏览: 6
### Java 中的局部内部类和匿名内部类
#### 局部内部类
局部内部类是在方法、构造器或作用域内定义的类。这类内部类的作用范围仅限于声明它的代码块。由于其生命周期与所在的方法相同,因此可以访问该方法内的所有变量(前提是这些变量为`final`或实际上不可变)。下面展示了一个使用局部内部类的例子:
```java
public class Outer {
private int outerValue = 10;
public void someMethod(final int param) {
// 定义局部内部类
class LocalInner {
public void print() {
System.out.println("outer value is " + outerValue);
System.out.println("parameter passed to the method is " + param);
}
}
// 实例化并调用局部内部类的方法
LocalInner localInstance = new LocalInner();
localInstance.print();
}
public static void main(String[] args) {
Outer outerObject = new Outer();
outerObject.someMethod(20);
}
}
```
此例子展示了如何在一个名为 `someMethod` 的方法体内定义一个叫做 `LocalInner` 的局部内部类,并通过它来打印来自外部类的数据成员以及传递给方法的形式参数。
#### 匿名内部类
匿名内部类是没有名字的一次性使用的类实现形式。通常用于简化那些只需要一次实例化的接口或者抽象类的具体实现。创建匿名内部类时不需要显式的命名,而是直接基于已有的父类或接口进行扩展。这里给出一段利用匿名内部类作为回调机制的简单示范:
```java
// 假设存在如下接口
interface Callback {
void callMe(int message);
}
class AnonymousDemo {
// 方法接受Callback类型的参数
public void registerCallback(Callback callback){
// 调用callback的方法
callback.callMe(42);
}
public static void main(String[] args) {
AnonymousDemo demo = new AnonymousDemo();
// 使用匿名内部类的方式注册回调函数
demo.registerCallback(new Callback(){
@Override
public void callMe(int message) {
System.out.println("Anonymous inner class received : " + message);
}
});
}
}
```
上述代码片段说明了怎样借助匿名内部类快速提供对接口 `Callback` 的具体实现,在不增加额外命名负担的情况下完成特定功能[^1]。
阅读全文