继承---子父类中构造器特点

 总结:

1子类所有构造器里面的第一句都是默认的隐式super(),导致建立对象时,子类构造器运行前父类构造器会先运行。

2子类构造器中的隐式super()默认空参,可以根据实际父类的构造器来写空参或实参的super()。

image

图片

 

【】子类构造器里面第一行存在默认的super(),所以会在子类构造器运行前先调用父类的构造器。

super()是隐式的,不写也在那个位置。

【】super(),默认是空参数构造器,父类如果构造器是实参数的,那么就会编译失败。

如果父类构造器是实参数的,那么子类应该把super()直接写出来并且写成对应实参数的。

图片

 【】super(4)调用父类的构造函数

【】子类中有多个构造器,每个构造器里面第一句都是super(),除非把super()直接写出来,否则默认指向父类空构造器。

 

图片

 

image

【】子类里面如果构造器第一行写this(),就占用了super(),他们都只能写在第一行。但是this()会调用子类另一个构造器,另一个构造器的第一行默认是super(),也能保证首先给父类初始化的目标。

 
 

image

【】任意一个类,他的构造函数,默认第一行隐式的super()给父类初始化,默认最后一句return;结束函数运行。

【】java是面向对象的语言,认为对象都有共性会进行抽取,最终抽取了一个最顶层的类object。

程序员写的任何类、任何对象都是object的子类,要么是直接要么是间接,都默认extends object。

object就是java的祖宗,是根类。

image

 
 
 内存图解
 

图片

 

【】main方法进栈,变量z在主函数开辟空间

【】右侧new Zi();首先类中方法进入方法区,因zi extends Fu,所以fu类首先方法区,之后子类方法进入方法区

【】右侧new Zi();堆内存建立zi对象,内存地址0034,成员属性默认初始化为0;然后,构造器zi()初始化开始。

【】zi()构造函数进栈,持有this指向0034,第一句super(),调用fu()构造函数进栈,持有this指向唯一对象0034,

启动show(),同名函数,zi对象从方法区首先找zi的方法。父中该方法被子覆盖,调用zi的show方法。此时num=0;

之后fu()构造器弹栈,剩下zi()构造器,

【】父构造器完成初始化后,也就是super()完成后,才轮到子中成员显示初始化num=8;

先把父类东西忙完,再干自己的活。

(默认初始化-显示初始化-构造函数初始化)

【】

【】zi调用show方法,打印出num就是8;

 

图片

 

图片

 

 

总结:子父类中

父类属性,子类直接拥有,子类中出现同名属性会优先使用子类中自己的属性。在子类中,要明确使用同名父类属性,需要加super代指父类空间。

父类函数,子类直接拥有,子类中出现同名函数会视为对父类同名函数的覆盖重写。在子类中,要明确使用同名父类函数,需要加super

子类对象建立,调用子类构造器,构造器中第一句就是super(),先执行父类构造函数。父类构造函数完成,子类对象的属性才执行显式初始化,子类构造器才能执行。

 
 
 
 
 
posted @ 2025-09-05 16:15  ibddindonon  阅读(9)  评论(0)    收藏  举报