如果子类的构造方法没有写super()会自动调用么
时间: 2024-04-20 10:23:10 浏览: 28
如果子类的构造方法没有显式地调用父类的构造方法(使用`super()`),则会自动隐式调用父类的默认构造方法(即无参构造方法)。这是因为在子类的构造方法中,如果没有使用`super()`或者`this()`来调用其他构造方法,编译器会自动插入一个默认的无参的`super()`语句作为第一行代码。
需要注意的是,当父类中没有无参构造方法时,子类的构造方法必须显式地调用父类的有参构造方法,并且使用`super()`语句来传递相应的参数。如果子类没有显式地调用父类的构造方法,编译器会报错。
所以,如果你希望子类调用父类的特定构造方法,你需要在子类的构造方法中使用`super()`来显式地调用父类的构造方法。如果你不需要特定的构造方法,那么编译器会自动调用父类的默认构造方法。
相关问题
能否在子类的构造方法中用super关键字调用父类的构造方法?
可以在子类的构造方法中使用super关键字调用父类的构造方法。在子类的构造方法中,使用super()调用父类的无参构造方法;如果父类没有无参构造方法,可以使用super关键字调用父类的其他构造方法,并传递相应的参数。例如:
```java
// 父类
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
}
// 子类
public class Student extends Person {
private int age;
public Student(String name, int age) {
super(name); // 调用父类的有参构造方法
this.age = age;
}
}
```
在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方
法的第一行。这是因为子类构造方法中必须先调用父类的构造方法来完成父类的初始化工作,然后才能进行子类自身的初始化工作。如果在子类构造方法的第一行不使用super()来调用父类的构造方法,那么编译器会自动添加一个默认的super()调用,但是如果父类没有无参构造方法,编译器就会报错。因此,为了保证程序的正确性,我们要在子类构造方法的第一行显式地调用父类的构造方法,确保父类的初始化工作得以顺利完成。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)