匿名内部类 的参数

来源:互联网 发布:php 获取get和post 编辑:程序博客网 时间:2024/05/16 11:02
public abstract class AnonymousInnerClass {

public abstract void output();

}

public class lll {

public static void main(String[] args) {


T1 tt = new T1();
AnonymousInnerClass aic = tt.test(10, 11);
aic.output();
System.out.println("tt输出");
T1 t = new T1();
AnonymousInnerClass aic1 = t.test(8, 9);
aic1.output();
System.out.println("t输出");
}
}


/*
 * 匿名内部类 1.必须继承一个父类或实现一个接口,且只能是一个, 2.没有构造方法 3.不能有static变量和方法
 * 4.为局部内部类,所有局部内部类的限制都有 5.不能是抽象的
 **/
class T1 {
final int k=0;
AnonymousInnerClass test(final int i,final int j) {//jdk1.8形参不用final也行,低版本会报错
return new AnonymousInnerClass() {
// static int i=0; 不能有static变量和方法
// int i_=i, j_=j;


// 不能有构造方法,可以用构造代码块,构造代码块先于构造方法执行
// {
// i_ = i;
// j_ = j;
// }


@Override
public void output() {
// TODO Auto-generated method stub
System.out.println(i + j+k);
}
};
}
}

参数用final修饰

为了避免引用值发生改变,例如被外部类的方法修改等,而导致内部类得到的值不一致,于是用final来让该引用不可改变。

      故如果定义了一个匿名内部类,并且希望它使用一个其外部定义的参数,那么编译器会要求该参数引用是final的。