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:内部类对外部类属性的调用情况-内部类在使用外部类成员的时候,构造内部类时,会自动给内部类添加外部类的应用,内部类就是通过这个引用调用的外部类中的方法。
JAVA基础-子类继承父类实例化对象过程的更多相关文章
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
- java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public ...
- java中子类继承父类时是否继承构造函数
来源:http://www.cnblogs.com/sunnychuh/archive/2011/09/09/2172131.html --------------------- java继承中对构造 ...
- java中子类继承父类什么?
1.继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包: 2.继承默认权限修饰符修饰的属性和方法,前提是子类和父类在同一个包.
- JAVA基础复习与总结<一> 对象与类的概念_内部类_继承与多态
一.对象与类 类:类是一个模版,它描述了一类对象的行为和状态. class animal { private int color; private int size; public void eat ...
- C#中通过类来继承两个接口,父类实例化接口中的方法,子类继承父类,调用方法
实现了父类继承接口,父类实例化接口的方法,子类继承父类,子类调用父类的方法直接使用 代码如下: using System; using System.Collections.Generic; usin ...
- Java实例化对象过程中的内存分配
Java实例化对象过程中的内存分配: https://blog.csdn.net/qq_36934826/article/details/82685791 问题引入这里先定义一个很不标准的“书”类,这 ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...
- Java中子类和父类相关方法的执行顺序
无意中看到下面一个题目,大家一起来看看最后的输出结果是什么.反正我看完之后,用IDE测试后感觉知识点得到巩固了. /** * 函数执行顺序测试 * Created by 萌小Q on 2017/5/1 ...
随机推荐
- 代码生成器(CodeBuilder) 2 正式发布
CodeBuilder是一个通过获取数据库表和字段定义,通过模板转换生成三层结构.实体模型等代码的工具. CodeBuilder第一版距今已过去4个年头了,第一版做的功能繁多,体积庞大,但是用起来不太 ...
- 【LeetCode】7. Reverse Integer 整型数反转
题目: Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 思路:不 ...
- 架构设计--逻辑层 vs 物理层
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 Layer 和Tier都是层,但是他们所表现的含义不同,Tier指的是软件系统中物理 ...
- 解决visual studio已安装的问题
使用Windows Install Clean Up(用管理员身份打开),找到相应的软件
- Sublime Text 2 配置及其使用
如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥. Sublime Text最大的优点就是跨平台,Mac和Windows均可完美使用:其次是强大的插件支 ...
- oracle学习系列之四 (视图)
视图视图是数据库中特有的对象.视图用于存储查询,但不会存储数据(物化视图除外).这是视图和数据表的重要区别.可以利用视图进行查询,插入,更新和删除数据.Oracle有如下四种视图(关系视图,内嵌视图, ...
- 【IHttpHandler】HttpModule,HttpHandler,HttpHandlerFactory简单使用
这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用. HttpModule:Http模块,可以在页面处理前后.应 ...
- JavaScript for...in 语句
JavaScript for...in 语句 for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作). for ... in 循环中的代码每执行一次,就会对数组的元素或者 ...
- Java druid
1.ConnectionFactory (添加引用:druid-1.0.1.jar) package nankang.test; import java.sql.Connection; import ...
- Android IOS WebRTC 音视频开发总结(二六)-- webrtc调用堆栈
本文主要是自己之前研究WebRTC代码结构时的一些资料(包括Android,iOS,PC),文章来自博客园RTC.Blacker,转载请说明出处. 1.WEBRTC模块:音频数据采集.发送.接收.播放 ...