【问题标题】:unable to inherit a parent class with no default constructor [duplicate]无法继承没有默认构造函数的父类[重复]
【发布时间】:2017-12-26 08:53:59
【问题描述】:

我有几个不同的实体,每个实体都派生自 AbstractXYZEntity。所有实体都属于 XYZ 域,并且它们的 XYZId 是 Long 类型。

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

public class XYZEntityOne extends AbstractXYZEntity {
  XYZId entityOneId;
}

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

java.lang.Long 中没有可用的默认构造函数

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

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

【问题讨论】:

  • Long 被宣布为“最终”。你不能延长它。
  • @Aominè 哦,我明白了。超级感谢。但是有没有办法在 Long 上创建一个表面的数据类型名称?
  • 组合优于继承。

标签: java


【解决方案1】:

在 Java 中,没有隐式的构造函数继承。如果您没有使用 super 关键字显式调用父构造函数,则假定您正在调用其默认构造函数(即,与不带参数调用 super() 相同),如果父构造函数当然会失败类没有默认构造函数。例如:

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,无论如何你都不能扩展它。相反,您可以创建一个 包含 long 数据成员的 XYZId 类。

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 2011-04-12
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2016-12-05
    • 2016-03-24
    相关资源
    最近更新 更多