Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:继承构造函数_Java_Oop_Inheritance - Fatal编程技术网

Java:继承构造函数

Java:继承构造函数,java,oop,inheritance,Java,Oop,Inheritance,我希望有一个具有参数的构造函数,该参数由所有子类自动继承,但Java不允许我这样做 甲级{ 公共Aint x{ //共享代码在这里 } } B类扩展了A类{ //来自 } C类扩展了{ //来自 } 我不想为每个子类都写Bint x、Cint x等。有没有更聪明的方法来解决这个问题 解决方案1。创建一个可以在构造函数之后调用的init方法。这是可行的,尽管对于我的特定设计,我想要求用户在构造函数中指定在编译时验证的某些参数,例如不通过varargs/reflection进行验证。您不能。如果您想

我希望有一个具有参数的构造函数,该参数由所有子类自动继承,但Java不允许我这样做

甲级{ 公共Aint x{ //共享代码在这里 } } B类扩展了A类{ //来自 } C类扩展了{ //来自 } 我不想为每个子类都写Bint x、Cint x等。有没有更聪明的方法来解决这个问题


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

您不能。如果您想在基类中有一个参数化构造函数,而不是无参数构造函数,那么您必须在每个子类中定义一个构造函数并调用超级构造函数。

在java中不行。如果不在方法中显式声明方法参数,则无法给出方法参数。这样做可能不是最好的主意,它可能会导致非常混乱的代码和过于复杂的事情。另一种选择是必须键入几个额外的字符,这也没那么糟糕D

摘要:子类继承所有 成员字段、方法和嵌套 类从其超类中删除。 构造函数不是成员,所以它们是 不是由子类继承的,而是 超类的构造函数可以 可以从子类调用


其他回答是正确的,Java不允许您继承构造函数。但是IDE可以用来帮助减轻为所有类创建它们的巨大负担


在Eclipse中,转到Source菜单并选择GenerateContractorsfromsuperclass。。。。在使用对话框创建新类时,也可以选择此选项。

如果要指定默认值,可以在基类中创建一个调用参数化构造函数的空构造函数


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

Hmmm。。。一个人的巨大负担是另一个人的琐碎任务。在IntelliJ IDEA中,您可以Alt+Insert并选择构造函数。这将弹出一个菜单,您可以在其中选择一个或多个父构造函数来实现,并且这些父构造函数将自动创建。无论我有多少次想起这一点,它仍然令人不安。投入所有这些努力来创建全面的基类,然后孩子们就变成了50行,因为我必须重写这么多的样板文件