Java:继承情况下构造方法的调用过程(idea 2019)

说明:

构造方法的第一条语句默认室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”

继续执行,一直到结束 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值