package com.lei.duixiang;
/**
* 局部内部类
* 1、如果需要在方法中使用局部变量,该局部变量需要被设置为 final 类型
* 2、换句话说,在方法中定义的内部类只能访问方法中 final 类型的局部变量
* 这是因为在方法中定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期
* 由于该局部变量被设置为final,所以不能在内部类中改变局部变量的值
* @author Administrator
*
* 匿名内部类 OutClass4
*/
interface Outinterface {
} // 定义一个接口
public class OutClass3 { // 局部内部类
public Outinterface doit(final String x) {
// 在 doit() 方法中定义一个内部类
class InnerClass2 implements Outinterface {
public InnerClass2(String s) {
s = x;
System.out.println(s);
}
}
return new InnerClass2("doit");
}
/**
* 在 doit() 方法 内部首先返回 一个 Outinterface 的引用,然后在 return 语句中插入一个自定义内部类的代码
* 由于这个类没有名称,所以这里将该内部类成为匿名内部类
* 实质上这种内部类的作用就是创建一个实现于 Outinterface 接口匿名类的对象
* 匿名类的所有是实现代码都需要在大括号之间进行编写,语法如下:
* return new A(){ ...//内部类体 };
* 在匿名内部类定义结束后,需要加分后标识
* 这个分号并不是是代表定义内部类结束的标识,而是代表创建 Outinterface 引用表达式的标识
* @author Administrator
*
*/
public class OutClass4 { // 匿名内部类
public Outinterface doit(){ //定义 doit() 方法
return new Outinterface(){ //声明 匿名内部类
private int i = 0;
public int getValue(){
return i;
}
};
}
}
public static void main(String[] args) {
OutClass3 out = new OutClass3();
out.doit("Outinterface doit");
}
}