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()。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程