说明:
构造方法的第一条语句默认室super(),含义是调用父类的无参构造方法
构造方法的第一条语句可以是显式的指定为父类的有参数构造方法:super(….)
构造方法的第一条语句可以是显式的指定当前类的构造方法:this(….)
注意事项:
每个类最好要提供无参数的构造方法
构造方法的第一条语句可以是通过super或者this调用构造方法,须是第一条语句
构造方法中不能够同时使用this和super调用构造方法,并不是说不能够同时使用this和super
进行测试:
创建Animal类,创建Dog类
package inherit3;
public class Animal {
private String color;
private int age;
public Animal() {
super();//默认调用父类无参数构造方法
System.out.println("-----Animal-------");
}
public Animal(String color, int age) {
super();
this.color = color;
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Animal{" +
"color='" + color + '\'' +
", age=" + age +
'}';
}
}
创建Dog类
package inherit3;
public class Dog extends Animal {
private String nickName;
private String type;//种类
public Dog(String color, int age, String nickName) {
super(color, age);
this.nickName = nickName;
this.type = type;
}
public Dog(String color, int age, String nickName,String type) {
//情况1:
//super();
//情况2:super(color,age)
//super(color, age);
// 情况3
//this(color, age, nickName);
this.nickName = nickName;
this.type = type;
}
public Dog() {
super();
System.out.println("-----dog-------");
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "Dog{" +
"nickName='" + nickName + '\'' +
", type='" + type + '\'' +
'}';
}
}
创建测试类
package inherit3;
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
Dog dog2 = new Dog("黑色", 4, "旺财", "哈士奇");
}
}
测试情况1:
Dog中有参构造方法( public Dog(String color, int age, String nickName,String type) )中第一条语句变为:
super();
在Dog dog2 = new Dog("黑色", 4, "旺财", "哈士奇");添加断点
进行debug
点击“Step Into”
发现进入Dog类中有参构造方法中super();语句
“Step Into”
进入父类Animal默认构造方法中super()语句
然后继续运行下一条语句
最后运行结果如下:
测试情况2:
将Dog类中有参构造方法中第一条语句写为
super(color,age);
在Dog dog2 = new Dog("黑色", 4, "旺财", "哈士奇");添加断点
右击debug运行
点击:“Step Into”
到达Dog类中有参构造方法中的第一条语句super(color,age);
“Step Into”
到达父类Animal中有参构造方法中的super();
继续“StepInto”
执行父类构造方法中的下一条语句
“StepInto”
“StepInto”执行括号
“StepInto” 返回Dog类中下一条语句进行nickName赋值
“StepInto” 执行下一条语句
直到测试结束
测试情况3:
将Dog类中有参构造方法中第一条语句写为
this(color, age, nickName);
添加断点进行Debug
点击“StepInto”
跳转到Dog类中的有参构造方法的第一条语句
“Step Into”
跳转到Dog类中的另一个有参构造方法
“StepInto”
跳转到父类Animal中有参构造方法
“StepInto”
继续执行,一直到结束