接口是抽象的,无法实例化

时间:2014-04-17 10:28:44

标签: java object interface abstract

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行会发生什么,当我放{}时为什么不会抛出错误。

5 个答案:

答案 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