假设有一个没有任何方法或属性的基类,如下面的class Base
。
public abstract class Base {
public Base() {}
}
我们还有另一个来自class Base
的类,比如说class Concrete
。据我所知,当我们创建Concrete
类的实例时,会创建两个实例:第一个是class Base
,第二个是class Concrete
。请考虑以下代码,创建200个实例。
for(int i = 0; i < 100; i++)
Concrete c = new Concrete();
对于上述情况,使class Base
成为一个接口是否有意义?如果我们这样做,将创建多少个实例,100或200?换句话说,是所有类实例共有的接口,还是每个类实例都有自己的接口实例?
答案 0 :(得分:4)
如果为派生类创建实例,则不会为抽象类创建单独的实例。只调用默认构造函数来初始化类(这意味着它将为字段分配默认值)。
如果您在同一个对象上检查instanceof
运算符,则会得到真实的响应。
如果您的抽象类有两个不同的子类,当您实例化它们时,将调用它们的构造函数,然后将调用父构造函数并初始化字段。
如果您不做任何事情,将调用父项的默认构造函数。但是,您可以使用super关键字来调用父类的特定构造函数。
答案 1 :(得分:3)
由于您的抽象基类没有任何功能,因此它作为接口会更有用。
在任何一种情况下,只创建了100个实例(类Concrete
)。这些实例恰好也是Base
的实例。