【发布时间】:2017-02-03 09:53:24
【问题描述】:
我只是从 Java 开始我的故事,但是我对 Python 有一些 OOP 经验。我有以下类层次结构:
class A {
public A() {};
public A(final java.util.Map dict) {};
}
class B extends A {
}
public class Main {
public static void main() {
java.util.Map d = new java.util.HashMap();
B b = new B(d);
}
}
附加代码导致以下错误:
Main.java:16: error: constructor B in class B cannot be applied to given types;
B b = new B(d);
^
required: no arguments
found: Map
reason: actual and formal argument lists differ in length
1 error
我的期望是,由于所需的构造函数已经在基类中定义,不需要再定义另一个构造函数。为什么我需要为子类定义一个,因为除了调用 super() 之外,它们没有做任何特别的事情?有什么特殊原因,为什么java编译器要我在子类中定义构造函数?
【问题讨论】:
-
诸如“为什么语言会这样工作”之类的问题只能由语言的设计者来回答,而不是由这个社区来回答。在 Java 中,构造函数不是继承的。这是事实。除此之外的任何事情都是猜测。
-
"有什么特殊原因,为什么java编译器要我在子类中定义构造函数?"您的意思是除了 James Gosling 和 Java 标准委员会认为这种方式更好之外还有其他原因吗?不,没有。
-
@AdrianColomitchi,我想知道 James Gosling 和 Java 标准委员会采用这种设计设计的原因?
-
旁注:不要使用原始类型。
标签: java oop inheritance constructor constructor-inheritance