当我们在java中使用继承时,我们可以通过子类继承超类的构造函数吗?
在tutorialspoint,它说:
子类继承所有成员(字段,方法和嵌套 来自其超类的类)。构造者不是成员,所以他们 不是由子类继承,而是超类的构造函数 可以从子类调用。
但是在同一个教程的某个地方说:
如果一个类继承了另一个类的属性,则为子类 自动获取超类的默认构造函数。
所以我想知道子类是否可以继承超类的构造函数?
答案 0 :(得分:6)
所以我想知道子类是否可以继承super的构造函数 类?
构造函数无法继承。
接下来,我设法在tutorialspoint找到了您与之相关的来源。
重要的是要注意,它所提及的部分明确标题为调用超类构造函数,并声明:
如果一个类继承了另一个类的属性,则为子类 自动获取超类的默认构造函数。但 如果你想调用超类的参数化构造函数,你 需要使用super关键字,如下所示。
super(values);
简单地说,这就是说,如果子类构造函数没有指定要调用哪个超类构造函数,那么编译器将自动调用超类中的可访问 no-args 构造函数。
但是,一旦超类中有参数化构造函数,必须将其作为派生类构造函数中的第一个语句调用,否则您的程序将不编译
e.g
public class Super { ... }
public class Derived extends Super { ... } // good ! compiler puts in a public default constructor for you.
下面的代码将不编译,您应该收到错误说明:
Super
中没有默认构造函数
public class Super {
public Super(int id) {...}
}
public class Derived extends Super {...}
意味着你需要显式地调用Super
类构造函数作为Derived
类的构造函数中的第一个语句,提供必要的参数,例如:
public Derived(){ super(12);}
答案 1 :(得分:1)
您可以使用super关键字访问超类构造函数。
您需要在子类中定义构造函数并调用超级构造函数。
characterID
答案 2 :(得分:-1)
默认情况下,所有超类构造函数都是继承的,您可以使用子类构造函数调用这些构造函数。
当你实例化子类对象时,子类构造函数之前的子类期望它将执行超类构造函数,然后它将继续执行子类构造函数。如果您想使用除默认超级构造函数之外的其他超级构造函数,则可以使用子类构造函数中的super关键字进行调用,并且此调用应该是子类构造函数中的第一个语句。
示例:
public Subclass(String msg) {
super(msg); // calling non default super class constructor
// any other initialization
}