无法继承没有默认构造函数

时间:2017-12-26 08:53:59

标签: java

我有几个不同的实体,每个实体都派生自AbstractXYZEntity。所有实体都属于XYZ域,其XYZId属于Long。

我想创建一个数据类型class XYZId extends Long,然后每个实体将如下所示 -

public class XYZEntityOne extends AbstractXYZEntity {
  XYZId entityOneId;
}

问题是当我尝试创建XYZId时,编译器显示以下错误 -

  

java.lang.Long

中没有可用的默认构造函数

据我所知,默认构造函数在Long中不可用,因为它没有任何意义。在创建Long实例之前,必须有一些数字。

但是为什么我不能创建一个从它扩展的数据类型,它也没有默认的构造函数?

1 个答案:

答案 0 :(得分:2)

在Java中,没有隐式的构造函数继承。如果你没有使用super关键字显式调用父的构造函数,那么假设你正在调用它的默认构造函数(即,与没有参数调用super()相同),当然,如果父类没有默认构造函数,则失败。 E.g:

public class Parent {
    // Note: No default constructor

    public Parent(String s) {
        // Do something with s
    }
}

public class Child extends Parent {
    public Child(String s) {
        super(s);
    }
}

但是,在这种情况下,这是一个模拟讨论,因为java.lang.Longfinal,并且无论如何都无法扩展它。相反,您可以创建一个{strong}包含一个XYZId数据成员的long类。