我刚刚开始讲述Java的故事,但是我对Python有一些OOP体验。我有以下的类层次结构:覆盖java中的子类中的参数化构造函数
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中,构造函数不会被继承。这是事实。除此之外的任何事情都是猜测。 – RealSkeptic
[Java Constructor Inheritance](http://stackoverflow.com/questions/1644317/java-constructor-inheritance) – shmosel
“是否有任何特殊原因,为什么java编译器要我在子类中定义构造函数?”你的意思是除了James Gosling和Java标准委员会之外的其他任何理由认为这种方式更好?不,没有一个。 –