JAVA中继承:构造器特点、this、super小结

子类继承父类后构造器的特点:

●子类中所有的构造器默认都会先访问父类中无参的构造器,再执行自己。

为什么?

●子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。
●子类初始化之前,一定要调用父类构造器先完成父类数据空间的初始化。

怎么调用父类构造器的?

●子类构造器的第一行语句默认都是:super(),不写也存在。

public class Test_02 {
    public static void main(String[] args) {
        new Dog2();
        System.out.println("============================================");
        new Dog2("大黄");
    }
}

class Animal2 {
    public Animal2() {
        System.out.println("这是父类无参数构造器");
    }
}

class Dog2 extends Animal2 {
    public Dog2() {
        System.out.println("这是子类无参数构造器");
    }

    public Dog2(String name) {
        System.out.println(name + "这是子类有参数构造器");
    }
}

运行结果:

这是父类无参数构造器
这是子类无参数构造器
============================================
这是父类无参数构造器
大黄这是子类有参数构造器

super调用父类有参数构造器的作用:

●初始化继承自父类的数据。

如果父类中没有无参数构造器,只有有参构造器,会出现什么现象呢?

●会报错。因为子类默认是调用父类无参构造器的。

如何解决?

●子类构造器中可以通过书写super(.….),手动调用父类的有参数构造器

this和super详情

this:代表本类对象的引用;
super:代表父类存储空间的标识。

![K}LBHB`@XUEUI8]QF3ANRC.png

this(..)和super(..)使用注意点:

●子类通过 this (..去调用本类的其他构造器,本类其他构造器会通过super去手动调用父类的构造器,最终还是会调用父类构造器的。
●注意: this(..) super(..)都只能放在构造器的第-行,所以二者不能共存在同一-个构造器中。

public class Student {
    String name;
    String school;


    /**
     * 如果学生不填写学校,默认这个对象是北京大学
     * @param name
     */
    public Student(String name) {
        //借用本类兄弟构造器
        this(name,"北京大学");
    }

    public Student(String name, String school) {
        //super();必需先初始化父类,再初始化自己
        this.name = name;
        this.school = school;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }
}
public class Test_02 {
    public static void main(String[] args) {
        //this(...)的作用:本类构造器中访问本类兄弟构造器
        Student student1 = new Student("张三");

        System.out.println(student1.getName());
        System.out.println(student1.getSchool());

        Student student2 = new Student("李四", "清华大学");

        System.out.println(student2.getName());
        System.out.println(student2.getSchool());

    }
}

总结

1、super调用父类构造器的作用是什么?

通过调用父类有参数构造器来初始化继承自父类的数据

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容