JAVA基础-⼦类继承⽗类实例化对象过程
之前在项⽬中碰到这样⼀个问题:
类B继承了类A,B在实例化的时候,A的构造⽅法中调⽤了B的某个⽅法,并且B的⽅法中对B的成员属性进⾏了初始化,然后最后得到的B对象的成员属性为空。
代码场景如下:
这⾥B new出来后s会被“s = null”覆盖A中调⽤init的值,A中调⽤的⽅法若被⼦类覆盖,那么构造过程中虽然是先构造A对象,但是A对像调⽤的⽅法却是⼦对象的⽅法,然后调⽤B的代码块,构造⽅法。实例化类和实例化对象
这⾥为了不然S=null覆盖原来的初始化值,我们可以去掉代码块中s的初始化过程。
我们来详细分析下⼦类构造过程中,代码的执⾏过程
图例:
这是⼀个⽗⼦类的模型,中间有静态代码块、初始化代码块、构造⽅法、成员⽅法,那么构造TT2()的过程如下:
new TT2()->new TT1()-> static tt1 1-> static tt1 2-> tt1List = new ...-> tt1 constructor->tt2 static tt2 1-> tt2 static tt2 2->list = null-> tt2 contructor->END
这样可能不是太清晰,我们⽤图来标注下:
输出结果如下:
总结:累的加载过程不管多么复杂,总是按照-静态代码块->普通代码块->构造⽅法,这个顺序执⾏的,按照顺序⼀步步分析,将程序结构捋清楚就能避免不必要的错误。
ps:内部类对外部类属性的调⽤情况-内部类在使⽤外部类成员的时候,构造内部类时,会⾃动给内
部类添加外部类的应⽤,内部类就是通过这个引⽤调⽤的外部类中的⽅法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论