interface Hierarchy {
}
class Sub1 implements Hierarchy {
}
public class Ob {
public static void main(String[] args) {
Hierarchy hie = new Hierarchy(){};//not getting error line 11
Hierarchy hie1 = new Hierarchy();//while creating like this error line 12
}
}
hie
对象创建完美,但hie1
未创建抛出错误
Hierarchy is abstract cannot be instantiated
请告诉我如果我把{}
放在第11行会发生什么,当我放{}
时为什么不会抛出错误。
答案 0 :(得分:4)
在new
运算符(例如,Hierarchy hie = new Hierarchy(){};
)之后添加一个块会创建一个实现该接口的匿名类,并返回它的一个实例。由于您的Hierarchy
接口为空,因此您无需执行任何操作。但如果它定义了任何方法,则必须在该块中实现它们。
答案 1 :(得分:3)
Hierarchy hie = new Hierarchy(){}; // this is new implementation for Hierarchy
您必须在此处覆盖层次结构界面中的所有方法。
Hierarchy hie1 = new Hierarchy();// this will call the constructor of the class
由于Hierarchy不是类,因此没有构造函数。你无法初始化
答案 2 :(得分:1)
第一行实例化一个实现接口的匿名类,由{}中包含的主体发出信号。这是合法的。由于接口声明没有方法,类的主体可以为空。
第二行尝试直接实例化接口。这是不合法的。
答案 3 :(得分:0)
在新结束时添加{}
时,您正在做的是创建Anonimous Class。
因此,在第一种情况下,您实例化您刚刚创建的类的对象(合法),而在第二种情况下,您尝试实例化没有类的对象(不合法)
答案 4 :(得分:-2)
在这两种情况下,您似乎都在尝试创建一个实现该接口的匿名类。但是你需要{}
才能做到这一点。否则,这是不合法的。请注意,您无法实例化interface