qq_28485505
MajorTomZz
采纳率100%
2016-08-22 03:14

Java匿名内部类的域的问题,想问下各位大神,为什么这一段输出要加大括号呢?

已采纳
 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();
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • u013076997 efficiency_shang 5年前

    就好像你的一个类中为什么不能直接System.out.println("cc");而必须要用代码块展示,道理是一个样的,匿名内部类也是一个类

    点赞 2 评论 复制链接分享
  • winnie90 winnie90 5年前

    public A(int i){
    System.out.println(i);
    }
    这是A类的构造方法 所以{System.out.println("cc");}相当于是一个方法 所以要用大括号

    点赞 1 评论 复制链接分享
  • yuyubingMan yuyubingMan 5年前

    匿名内部类要实现里面的方法(含抽象方法),该方法是属于该内部类的,
    如果不加大括号,不就是方法里面套方法么,这个方法属于谁? 语法不成立啊。

    点赞 1 评论 复制链接分享
  • bdmh bdmh 5年前

    它是一段具体的代码,不是变量声明,需要放到大括号里,编译器才能识别

    点赞 1 评论 复制链接分享
  • wangtong1234567 sky小糊涂神 5年前

    因为是匿名的啊。。。你也知道是匿名的,所谓匿名就是不是真正存在这个类,只是在用这个类的时候现生成。

    点赞 评论 复制链接分享