JAVA基础-子类继承父类实例化对象过程
2015-05-16 15:22
447 查看
之前在项目中碰到这样一个问题:
类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基础之继承extends,以及子类实例化过程
- Java基础学习17(子类对象实例化的全过程图解,内存分配)
- 2018/01/07JAVA 基础 / 接口与继承:重写【子类继承并覆盖父类的对象方法】、隐藏【子类继承并覆盖父类的类方法】与实现类实现接口方法の区别
- 再学 JAVA基础(5)对象转型,多态。【子类对象的实例化过程】
- Java对象的构造过程---子类继承父类时(非)静态块及构造函数等的执行顺序
- JAVA基础知识再学习(3)继承概论 & 子类实例化过程
- java 父类访问子类对象的实例变量 继承过程中的执行顺序
- 张孝祥老师java课程_子类对象的实例化过程
- JAVA学习--子类对象实例化的全过程
- JAVA学习--子类对象实例化的全过程
- java基础问题----------TreeSet里面放对象,如果同时放入了父类和子类的实例对象
- 18天Java学习---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
- 子类继承父类,那么子类实例化时对象调用的是父类还是子类的构造函数?
- Java学习笔记---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
- OO 中的继承分析:主要分析在编译和运行过程中 子类、父类 的字段和方法以及实例化时候在内存中分配 和 执行的先后,以及两个原则
- 黑马程序员--java中父类和子类都有构造方法时,子类对象的初始化过程
- java继承,多态方面的一个问题,定义一个父类对象,用子类new
- Java 父类子类的对象初始化过程
- java面向对象-子父类中构造函数的特点-子类实例化过程super