Java:继承构造函数

时间:2009-09-06 00:36:11

标签: java oop inheritance

我希望有一个构造函数,其参数可以自动地由所有子类继承,但Java不会让我这样做

class A {
    public A(int x) {
     // Shared code here
    }
}

class B extends A {
    // Implicit (int x) constructor from A
}

class C extends A {
    // Implicit (int x) constructor from A
}

我不想为每个子类写B(int x)C(int x)等。是否有更聪明的方法来解决这个问题?

解决方案#1。创建一个可以在构造函数之后调用的init()方法。这是有效的,但是对于我的特定设计,我想要求用户在构造函数中指定在编译时验证的某些参数(例如,不通过varargs / reflection)。

5 个答案:

答案 0 :(得分:26)

你做不到。如果你想在你的基类中有一个参数化的构造函数 - 而且没有无参数的构造函数 - 你必须在每个后代类中定义一个构造函数(并调用super()构造函数)。

答案 1 :(得分:12)

其他回复是正确的,Java不会让你继承构造函数。但IDE可以用来帮助减轻为所有课程创建这些内容的巨大负担。

在Eclipse中,转到“Source”菜单并选择“Generate Constructors from Superclass ...”。使用对话框创建新类时,也可以选择此选项。

答案 2 :(得分:4)

Inheritance

  

摘要:子类继承了所有   成员(字段,方法和嵌套   来自其超类的类)。   构造者不是成员,所以他们   不是由子类继承,而是   超类的构造函数可以   从子类调用。

答案 3 :(得分:2)

你不能在java中。如果没有在方法中明确声明它们,则无法给出方法参数。这样做可能不是最好的主意,它可能导致非常混乱的代码和过于复杂的事情。必须输入一些额外字符的替代方案不是 坏。 :d

答案 4 :(得分:0)

如果您有要分配的默认值,则可以在基类中创建一个调用参数化构造函数的空构造函数。

这将消除子类调用参数化构造函数的需要。