Java:inheritance构造函数

我希望有一个构造函数,其参数可以自动由所有子类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()方法。 这是有效的,虽然对于我的特定设计,我想要求用户在构造函数中指定在编译时validation的某些参数(例如,不通过varargs / reflection)。

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

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

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

遗产

概要:子类从其超类inheritance所有成员(字段,方法和嵌套类)。 构造函数不是成员,因此它们不是由子类inheritance的,但是可以从子类调用超类的构造函数。

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

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

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