如果接口不能有构造函数,这里会发生什么?

时间:2014-01-29 13:23:50

标签: java interface

需要一些帮助,如果界面不能有构造函数,这里会发生什么?

interface A{
     String toString(); 
}

public class B{
    public static void main(String[] args) {
        System.out.println(new A() {
           public String toString() { 
              return "what happens here!!"; 
           }
     });
    }
}

2 个答案:

答案 0 :(得分:10)

创建实现A的anonymous class实例。

这与构造函数关系不大,除了将调用默认的no-arg构造函数,并且已经在Object类中定义了toString()方法,因此接口是多余的。

答案 1 :(得分:3)

public static void main(String[] args) {
  System.out.println(new A() {
     public String toString() { return "what happens here!!"; }
  });
}

可以更明确地重写如下:

public static void main(String[] args) {
   class ImplA() extends Object implements A {
     public ImplA() { super(); }
     public String toString() { return "what happens here!!"; }
   }
   System.out.println(new ImplA());
}

从上面你可以理解以下内容:

  • 本地班级ImplAObject的子类,并且还实现了A;
  • Object有一个无效的构造函数;
  • ImplA定义了一个无效的构造函数,它委托给Object的无效构造函数;
  • 在编写new ImplA();
  • 时调用如此声明的构造函数

您的代码版本只使用Java的语法糖,它允许您将本地类声明类实例化组合成一个表达式。