需要一些帮助,如果界面不能有构造函数,这里会发生什么?
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!!";
}
});
}
}
答案 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());
}
从上面你可以理解以下内容:
ImplA
是Object
的子类,并且还实现了A
; Object
有一个无效的构造函数; ImplA
定义了一个无效的构造函数,它委托给Object
的无效构造函数; new ImplA();
您的代码版本只使用Java的语法糖,它允许您将本地类声明与类实例化组合成一个表达式。