揭秘子类构造函数执行过程

子父类中的构造函数

      在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数底层默认第一行有一条隐式的语句 super();

seper(); 会访问呢父类空参数的构造函数,而且子类中的所有构造函数默认第一行都是seper();

为什么子类一定要访问父类中的构造函数?

1.因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。

2.所以在子类在对象初始化时,要先访问一下父类中的构造函数。

3.如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。

package cn.zhaoqiang.pet;
/*
 * 宠物类,狗狗和企鹅的父类
 * */

public class Pet{
    private String name = "SeyHello";  //名字
    private int health = 100;  //健康值
    private int love = 10;      //亲密度
    //无参构造方法
    public Pet() {
        this.health=95;
        System.out.println("执行宠物的无参构造方法");
    }
    //有参构造方法
    public Pet(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getHealth() {
        return health;
    }
    public void setHealth(int health) {
        this.health = health;
    }
    public int getLove() {
        return love;
    }
    public void setLove(int love) {
        this.love = love;
    }
    //输出宠物信息
    public void print(){
        System.out.println("宠物自白:\n我的名字叫:"+this.name+",我的健康值为:"+this.health+",我和主人的亲密度:"+this.love);
    }
    
}

 

package cn.zhaoqiang.pet;
/*
 *  宠物类狗狗的子类
 * */

public class Dog extends Pet {
    //品种
    private String strain;
    //有参构造 名字,品种
    public Dog(String name,String strain){
        super(name);//此出不能使用 this.name=name;
        this.strain=strain;
    }
    public String getStrain(){
        return strain;    
    }
}
package cn.zhaoqiang.pet;

/*
 * 企鹅类,宠物的子类
 * */

public class Penguin extends Pet{
    private String sex;  //性别
    //有参构造方法
    public Penguin(String name,String sex){
        super(name);//此出不能使用 this.name=name;
        this.sex = sex;
    }
    public String getsex(){
        return sex;
    }

}
package cn.zhaoqiang.pet;
/*
 * 测试类的继承;
 * 
 * */

public class Test {
    public static void main(String[] args) {
        //创建宠物对象pp并输出信息
        Pet pp = new Pet();
        pp.print();
        //创建狗狗对象dog并输出信息
        Dog dog =new Dog("藏獒", "哈吉吧");
        dog.print();
        //创建企鹅对象pgn并输出信息
        Penguin pgn = new Penguin("毛奥","Q妹"); 
        pgn.print();
    }

}

 

posted @ 2017-04-21 12:20  心与心的距离  阅读(1673)  评论(0编辑  收藏  举报