在java中继承构造函数

cha*_*dot -1 java inheritance

当我们在java中使用继承时,我们可以通过子类继承超类的构造函数吗?

tutorialspoint它说:

子类从其超类继承所有成员(字段,方法和嵌套类).构造函数不是成员,因此它们不是由子类继承的,但是可以从子类调用超类的构造函数.

但在同一个教程的某个地方说:

如果类继承另一个类的属性,则子类自动获取超类的默认构造函数.

所以我想知道子类可以继承超类的构造函数吗?

Ous*_* D. 6

所以我想知道子类可以继承超类的构造函数吗?

构造函数不能被继承.

继续,我已经设法在tutorialspoint找到你所关注的来源.

重要的是要注意,它所提到的部分显然标题为Invoking Superclass Constructor,它指出:

如果类继承另一个类的属性,则子类自动获取超类的默认构造函数.但是如果要调用超类的参数化构造函数,则需要使用super关键字,如下所示.

super(values);
Run Code Online (Sandbox Code Playgroud)

简单地说,这就是说,如果子类构造函数没有指定要调用哪个超类构造函数,那么编译器将自动调用超类中的可访问no-args构造函数.

但是,一旦超类中有参数化构造函数,您必须将其作为派生类的构造函数中的第一个语句调用,否则您的程序将无法编译.

例如

public class Super { ... }
public class Derived extends Super { ... } // good ! compiler puts in a public default constructor for you.
Run Code Online (Sandbox Code Playgroud)

下面的代码将无法编译,你应该收到一个错误说明:

Super中没有默认构造函数

public class Super {
    public Super(int id) {...} 
}
public class Derived extends Super {...}
Run Code Online (Sandbox Code Playgroud)

意味着你需要Super显式调用类构造函数作为类的构造函数中的第一个语句Derived,提供必要的参数,例如

public Derived(){ super(12);}
Run Code Online (Sandbox Code Playgroud)