千家信息网

Java继承构造器怎么用

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章给大家分享的是有关Java继承构造器怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。初始化基类前面提到,继承是子类对父类的拓展。《Thinking in Jav
千家信息网最后更新 2026年11月04日Java继承构造器怎么用

这篇文章给大家分享的是有关Java继承构造器怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

初始化基类

前面提到,继承是子类对父类的拓展。《Thinking in Java》中提到下面一段话:

当创建一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建的对象是一样的。二者区别在于,后者来自于外部,而基类的子对象被包装在导出类的对象内部。

我们在创建子类对象时,调用了父类的构造器,甚至父类的父类构造器。我们知道,构造器用于创建对象,那么突然产生疑惑:关于创建一个子类对象时,是否会先创建父类对象?

经过查找资料,得出结论:

并没有。在创建子类对象时,会把父类的成员变量和方法加载进内存,既然要加载,便调用父类构造器看看这些数据是如何进行初始化的,仅此而已,并不是创建了父类的对象。

所以,可以看作,子类对象中包含着父类的子对象。我们知道,对象的初始化是至关重要的。那么,这个父类的子对象如何正确初始化呢?对了,就是接下来要说的:在构造器中调用基类构造器来执行初始化。注意:子类并不能继承父类的构造器,只是单纯调用了基类构造器中的初始化代码。

默认构造器

先看一段简单的测试代码:

package com.my.pac13;/*继承中的构造*/public class Person { Person(){ System.out.println("Person()"); }}class Student extends Person{ Student(){ System.out.println("Student()"); }}class PrimaryStudent extends Student{ PrimaryStudent(){ //super(); System.out.println("PrimaryStudent()"); } public static void main(String[] args) { //创建了PrimaryStudent对象 new PrimaryStudent(); }}/* Person() Student() PrimaryStudent()*/

关于构造器,我们前面提到,任何没有显式构造器的类都存在着一个无参数的默认构造器。我们上面的例子在默认构造器中加入了打印输出,以便理解。

可以看到的是:

在创建PrimaryStudent时,他的直接父类Student和间接父类Person中的构造器都被调用了,而且可以看到,是"自上而下"的。父类在子类构造器可以访问它之前,就已经完成了初始化的操作。

若子类没有显式调用父类的构造器,则自动调用父类的默认(无参)构造器。

带参数的构造器

前面的代码中,每个类都含有默认的构造器,创建子类对象时,是自上而下,且子类会默认调用父类的无参构造器。那么,假设父类正好没有无参构造器或者你正想调用父类的带参构造器,这时就需要我们的super关键字。(super关键字之后还会进行总结)

我们直接在原来的基础上稍作修改,并进行测试。

package com.my.pac13;/*调用基类构造器是子类构造器中要做的第一件事*/public class Person { //没有默认构造器 Person(String name){ System.out.println("Person()\t"+name); }}class Student extends Person{ //也没有默认构造器,且用super显式调用 Student(String n){ //super关键字调用父类的构造器 super(n); System.out.println("一参数Student\t"+n); } Student(String n,String m){ //this关键字调用同一类中重载的构造器 this(n); System.out.println("二参数student()\t"+m); }}class PrimaryStudent extends Student{ //隐式调用父类构无参数构造器,但是父类没有,所以要用super显式调用 PrimaryStudent(){ //没有下面的语句会报错 super("hello"); System.out.println("PrimaryStudent()"); }}class ExtendsTest{ public static void main(String[] args) { new Person("the shy"); System.out.println("***********"); new Student("rookie"); System.out.println("***********"); new Student("the shy","rookie"); System.out.println("***********"); new PrimaryStudent(); System.out.println("***********"); }}/*Person() the shy***********Person() rookie一参数Student rookie***********Person() the shy一参数Student the shy二参数student() rookie***********Person() hello一参数Student helloPrimaryStudent()*********** */

this是正在创建的对象,用于调用同一类中重载的构造器,可以参看我之前的文章:Java关键字之this。 super在调用构造器时,使用方法和this相似。(但super和this本身有本质的不同,super并不是一个对象的引用!!!) super和this语句都必须出现在第一行,也就是说一个构造器中只能有其中之一。

子类调用父类构造器

无论是否使用super语句来调用父类构造器的初始化代码,子类构造器总是会事先调用父类构造器!这是一定要记住的!

子类构造器A在第一行显式使用super调用父类构造器B,格式super(参数列表),根据参数列表选择对应的父类构造器。

//父类 Person(String name){ System.out.println("Person()\t"+name); }//子类 Student(String n){ //super关键字调用父类的构造器 super(n); System.out.println("一参数Student\t"+n); }

子类构造器A先用this调用本类重载的构造器B,然后B调用父类构造器。

//父类 Person(String name){ System.out.println("Person()\t"+name); }//子类Student(String n){ //super关键字调用父类的构造器 super(n); System.out.println("一参数Student\t"+n); }Student(String n,String m){//this关键字调用同一类中重载的构造器 this(n); System.out.println("二参数student()\t"+m);}

子类构造器中没有super和this时,系统会隐式调用父类的无参构造器,要是没有无参的,那就报错。

//隐式调用父类构无参数构造器,但是父类没有,所以要用super显式调用PrimaryStudent(){//没有下面的语句会报错 super("hello"); System.out.println("PrimaryStudent()");}

综上所述:

当调用子类构造器对子类对象进行初始化时,父类构造器总会在子类构造器之前执行。甚至,父类的父类会在父类之前执行……一直追溯到所有类的超类Object类的构造器。

感谢各位的阅读!关于"Java继承构造器怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

构造器 对象 子类 参数 关键 关键字 代码 语句 面的 一行 内容 文章 方法 更多 篇文章 自上而下 会报 测试 不同 不错 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州找大状互联网科技有限公司 深圳恒合互联网络科技有限公司 鸠鸠互联网科技 疫情对互联网科技公司影响 腾讯阿里互联网科技 西安互联网科技公司 融势互联网科技 太原新华互联网科技学校怎么样 云创客互联网科技公司 互联网科技公司需要的职位 新华互联网科技2019 成都互联网科技公司100强 河南猎农互联网科技有限公司 互联网科技与大数据专业 燊美集互联网科技有限公司 浙南科技城互联网大厦建设工程 中和天地互联网科技有限公司 互联网方面的科技前沿 美国五大互联网科技公司市值多少 杭州融税互联网科技有限公司 互联网科技园 科技互联网公司装修 互联网为科技 互联网未来科技 南京欣网互联网科技 无锡溥仪互联网科技有限公司 云创客互联网科技公司 本届互联网博览会上的黑科技 长沙易易互联网科技有限公司 现代科技的标志之一的互联网
0