- super方法必须是在构造方法的第一条命令,普通方法中不能使用super方法。
- 创建对象时当类中,所有构造方法都没有时,此时会调用父类的无参数构造方法构造对象。
- 子类无参数构造方法时,不用显式调用父类无参数构造方法,系统会自动提供。
- 默认不含super时自动调用不带参super,意味着父类中必须要有不带参数的构造方法,除非子类使用带参数super。
- 调用父类的构造方法,一定要放在方法的第一行。
- this()和super()都只能出现在构造方法的第一行,故this()和super()方法不能共存,当一个类的构造方法第一行中没有this(),也没有super(),系统默认有super()方法。
- this()是构造方法中调用本类其他的构造方法,super()是当前对象构造方法中去调用自己父类的构造方法。
- 不管你创建什么对象,Object对象的无参数构造方法一定会先执行,因为Object是所有类的根类。
举个栗子:
public class Demo {
public static void main(String[] args) {
new Cat();
}
}
//父类,Animal类
class Animal {
//构造函数
public Animal() {
super();
System.out.println("1:Animal类的无参数构造函数执行");
}
public Animal(int i) {
super();
System.out.println("2:Animal类的有int参数构造函数执行");
}
}
//子类,Cat类
class Cat extends Animal{
//构造函数
public Cat() {
this("");
System.out.println("3:Cat类的无参数构造函数执行");
}
public Cat(String str) {
super(5);
System.out.println("4:Cat类的有String参数构造函数执行");
}
}
执行结果为: