我希望有一个构造函数,其参数可以自动地由所有子类继承,但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)。
答案 0 :(得分:26)
你做不到。如果你想在你的基类中有一个参数化的构造函数 - 而且没有无参数的构造函数 - 你必须在每个后代类中定义一个构造函数(并调用super()
构造函数)。
答案 1 :(得分:12)
其他回复是正确的,Java不会让你继承构造函数。但IDE可以用来帮助减轻为所有课程创建这些内容的巨大负担。
在Eclipse中,转到“Source”菜单并选择“Generate Constructors from Superclass ...”。使用对话框创建新类时,也可以选择此选项。
答案 2 :(得分:4)
摘要:子类继承了所有 成员(字段,方法和嵌套 来自其超类的类)。 构造者不是成员,所以他们 不是由子类继承,而是 超类的构造函数可以 从子类调用。
答案 3 :(得分:2)
你不能在java中。如果没有在方法中明确声明它们,则无法给出方法参数。这样做可能不是最好的主意,它可能导致非常混乱的代码和过于复杂的事情。必须输入一些额外字符的替代方案不是 坏。 :d
答案 4 :(得分:0)
如果您有要分配的默认值,则可以在基类中创建一个调用参数化构造函数的空构造函数。
这将消除子类调用参数化构造函数的需要。