我有几个不同的实体,每个实体都派生自AbstractXYZEntity。所有实体都属于XYZ域,其XYZId属于Long。
我想创建一个数据类型class XYZId extends Long
,然后每个实体将如下所示 -
public class XYZEntityOne extends AbstractXYZEntity {
XYZId entityOneId;
}
问题是当我尝试创建XYZId时,编译器显示以下错误 -
java.lang.Long
中没有可用的默认构造函数
据我所知,默认构造函数在Long中不可用,因为它没有任何意义。在创建Long实例之前,必须有一些数字。
但是为什么我不能创建一个从它扩展的数据类型,它也没有默认的构造函数?
答案 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.Long
是final
,并且无论如何都无法扩展它。相反,您可以创建一个{strong}包含一个XYZId
数据成员的long
类。