1.子类中所有的构造方法默认都会访问父类中的无参构造方法。
2.子类会继承父类中的数据,还可能回去使用父类的数据。所以子类初始化之前,会先完成父类的初始化,即先访问父类中的无参构造方法。
3.在子类中,每一个构造方法的第一条语句默认都是super(),默认有一条,但是不显示。
4.在父类中有无参构造方法时,在子类的构造方法中写或不写super(),都会在子类的构造方法中执行一次父类的无参构造方法。
5.若父类中没有无参构造方法,或只有带参构造方法。
<1>使用super(具体参数);去调用父类的带参构造方法。
<2>在父类中自己提供一个无参构造方法(空构造,啥也不写)。
6.super和this在调用构造方法时,必须位于构造方法的第一行,并且每个构造方法中只能出现一次。
7.super与this功能相近,且在调用构造方法时,必须写在构造方法中才能使用。
为防止因缺少无参构造器而导致的报错,我们必须写一个空构造器,但是如果类中已经存在有参构造器时,系统不会再给我们分配无参构造器,假设一个类中不存在有参构造器,我们可以不写空构造器,因为系统会默认为我们安排一个空构造器。
class Animal{
public String name;
public int age;
public Animal() {
}//空构造器
public Animal(String name,int age) {
this.name=name;
this.age=age;
}//有参构造器
public void print() {
System.out.println("Name:"+name+" Age:"+age);
}
}
class Dog extends Animal{
/*错误演示
public void Dg() {
super("ss",2);//这里会报错,因为它没用在构造方法中,所以不能使用super(具体参数);
来调用构造方法
System.out.println("Name:");
}
*/
public Dog() {//这里是子类的构造方法,不会报错
super("ss",2);
System.out.println("你好");
}
}
public class oppo {
public static void main(String[] args) {
Dog ss=new Dog();
ss.print();
}
}
编译结果:
你好
Name:ss Age:2