当我们在java中使用继承时,我们可以通过子类继承超类的构造函数吗?
在tutorialspoint它说:
子类从其超类继承所有成员(字段,方法和嵌套类).构造函数不是成员,因此它们不是由子类继承的,但是可以从子类调用超类的构造函数.
但在同一个教程的某个地方说:
如果类继承另一个类的属性,则子类自动获取超类的默认构造函数.
所以我想知道子类可以继承超类的构造函数吗?
所以我想知道子类可以继承超类的构造函数吗?
构造函数不能被继承.
继续,我已经设法在tutorialspoint找到你所关注的来源.
重要的是要注意,它所提到的部分显然标题为Invoking Superclass Constructor,它指出:
如果类继承另一个类的属性,则子类自动获取超类的默认构造函数.但是如果要调用超类的参数化构造函数,则需要使用super关键字,如下所示.
Run Code Online (Sandbox Code Playgroud)super(values);
简单地说,这就是说,如果子类构造函数没有指定要调用哪个超类构造函数,那么编译器将自动调用超类中的可访问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)