子类为啥要调用父类的构造函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子类为啥要调用父类的构造函数相关的知识,希望对你有一定的参考价值。

在Java中,子类的构造过程中,必须 调用其父类的构造函数, 所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况. 构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以 第一个规则:子类的构造过程中,必须 调用其父类的构造方法 一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法,所谓默认的构造方法,就是没有参数的构造方法,但是如果你自己写了构造方法,那么编译器就不会给你添加了 所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造方法中我们并没有显示的调用基类的构造方法,就是没写,如:super(); 并没有这样写,但是 第二个规则:如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法 注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数 参考技术A 第一个 子类要能访问父类继承过来的那一坨信息,必须有地方存储这一坨信息 java中的实现方式是在子类对象内部构建一个父类对象
第二个 为了保证子类中的任何地方都能访问父类,默认会在子类构造器第一行调用父类构造器去构造父类对象 保证子类在自己的构造器中能访问继承的那坨信息
参考技术B 子类继承了父类,同样也继承了父类的成员变量。
所以系统需要先调用父类的构造方法,把父类里的东西创建好,再调用子类的。
参考技术C sun规定的,属于java的语法,没必要深究.话说回来有儿子必须得有父亲,一样个意思 参考技术D 创建对象?

为啥java的子类中必须调用父类的构造方法

参考技术A csdn博客上有个人说的比较好,参考一下:
子类继承父类的字段和方法。
你想那么子类中从父类继承的字段,要谁来初始化呢?
父类中有这些字段的初始化方式,所以最好的选择就是用父类的构造方法。
设计者,可能是这么考虑的。
再告诉你一个事,每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象。
java创建对象的三个步骤就是,申请内存,调用构造方法,返回对象引用。
所以说,为了那个内置的父类对象,也需要进行初始化。

以上是关于子类为啥要调用父类的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

java在子类里调用一个有参的构成函数,会默认调用父类的构造函数吗,为啥???

请教一下C#中父类静态构造函数在子类中为啥不会和子类的静态构造函数一起执行

为啥java的子类中必须调用父类的构造方法

子类都会首先调用父类的构造函数吗?

JAVA中,子类将继承父类的所有属性和方法吗?为啥?

java子类构造中怎么调用父类的构造函数