public class Base {
public static A getA(int i){
return new A(i){
{System.out.println("cc");}//这里为什么要加大括号呢?
public void f(){
System.out.println("sd");
}
};
}
public static void main(String[] args) {
A a=getA(47);
a.f();
}
}
abstract class A{
public A(int i){
System.out.println(i);
}
public abstract void f();
}
就好像你的一个类中为什么不能直接System.out.println("cc");而必须要用代码块展示,道理是一个样的,匿名内部类也是一个类
它是一段具体的代码,不是变量声明,需要放到大括号里,编译器才能识别
匿名内部类要实现里面的方法(含抽象方法),该方法是属于该内部类的,
如果不加大括号,不就是方法里面套方法么,这个方法属于谁? 语法不成立啊。
public A(int i){
System.out.println(i);
}
这是A类的构造方法 所以{System.out.println("cc");}相当于是一个方法 所以要用大括号
因为是匿名的啊。。。你也知道是匿名的,所谓匿名就是不是真正存在这个类,只是在用这个类的时候现生成。