子类对象中成员是有两部分组成的,基类继承下来的以及子类新增加的部分 。父子父子肯定是先有父再有子,所以在构造子类对象时候 ,先要调用基类的构造方法,将从基类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整。
情况1
class Animal{
public String name;
public int age;
public Animal(){
//父类无参的构造方法
}
// 在继承关系上,当我们构造子类的时候,一定要帮助父类进行构造:
public Animal(String name, int age) {
// 父类有参构造方法
this.name = name;
this.age = age;
System.out.println("带有2个参数的构造方法");
}
}
此时子类的 代码应该如何写?
class Dog extends Animal{
public Dog(){
// 调用父类中无参的构造方法
super();
}
public Dog(String name, int age){
// 调用父类中有参的构造方法
// 2.帮助父类成员进行初始化,一定调用构造方法。
super(name, age);
}
public void wangwang(){
System.out.println("汪汪叫");
}
}
不会报错,第一个调用父类中无参的构造方法,第二个调用父类中有参的构造方法
这样也不不会报错,都调用的是父类无参的构造方法,系统会默认在子类中加上super()
class Dog extends Animal{
public Dog(){
// 调用父类中无参的构造方法
}
public Dog(String name, int age){
// 调用父类中无参的构造方法
}
public void wangwang(){
System.out.println("汪汪叫");
}
}
情况2
class Animal{
public String name;
public int age;
// 在继承关系上,当我们构造子类的时候,一定要帮助父类进行构造:
public Animal(String name, int age) {
// 父类有参构造方法
this.name = name;
this.age = age;
System.out.println("带有2个参数的构造方法");
}
}
此时父类没有显示无参的构造方法,那么子类如何写构造方法呢?
class Dog extends Animal{
public Dog(){
// 调用父类中无参的构造方法
super("小白", 10);
}
}
class Dog extends Animal{
public Dog(String name, int age){
// 调用父类中有参的构造方法
// 2.帮助父类成员进行初始化,一定调用构造方法。
super(name, age);
}
}
都是正确的,都调用的是父类有参的构造方法!