Java 为什么构造函数不被继承

Java 为什么构造函数不被继承

构造函数是一个代码块,它允许你创建一个类的对象,它的名字与类相同,没有明确的返回类型。

每当一个类(子类)扩展另一个类(父类)时,子类会以变量和方法的形式继承其超类的状态和行为,但由于以下原因,它不会继承超类的构造器。

构造函数是特殊的,它的名字与类的名字相同。因此,如果构造函数在子类中被继承,那么子类将包含一个父类的构造函数,这违反了构造函数应该与类名相同的约束条件。例如,请看下面的代码。

class Parent {

public Parent()

{

}

public void print()

{

}

}

public class Child extends Parent {

public Parent()

{

}

public void print()

{

}

public static void main(String[] args)

{

Child c1 = new Child(); // allowed

Child c2 = new Parent(); // not allowed

}

}

如果我们在子类中定义父类的构造函数,会在编译时出现返回类型的错误,并认为它是一个方法。但是对于打印方法来说,它不会产生任何编译错误,并认为它是一个重写方法。

现在假设构造函数可以被继承,那么就不可能实现封装了。因为通过使用超类的构造函数,我们可以访问/初始化一个类的私有成员。

构造函数不能作为一个方法被调用。它在类的对象被创建时被调用,所以使用父类的构造函数符号来创建子类对象是没有意义的。

父类构造函数在子类中不被继承,这就是为什么如果没有明确地调用super或this,子类构造函数中会自动添加super()。