}
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的。