java中实例子类会有父类对象产生吗?如果不产生父类对象为什么子类有父类的属性和方法?
来源:互联网 发布:淘宝信用等级怎么看 编辑:程序博客网 时间:2024/05/19 03:46
首先第一个问题:
子类在创建实例后,类初始化方法会调用父类的初始化方法(除了java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法。
这个地方所说的是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即" <init>"方法,初始化方法是由java源程序的三个部分组成的,一个部分是成员字段后的直接的初始化语句,例如private int i=0;private Date date=new Date();等等,第二个部分是由初始化块组成,例如:Java code
public class Test{
private int i=0;//初始化第一部分
//以下大括号内为初始化第二部分
{
this.i=4; //do something......
}
}
第三个部分就是java源代码中的构造方法中的代码,java源代码中有几个构造方法,那么class文件中就有几个初始化方法,编译器会把第一部分与第二部分分别复制到每个初始化方法的前端,然后把初始化方法对应参数的构造方法的代码复制到相应初始化方法中(这里说的复制其实应该说是编译,不过为了让你更好理解所以如此说).
那么说初始化方法如何追述其父类的,这也关系到初始化方法的结构,初始化方法的执行顺序以及结构就如上所说,但是每个初始化方法的第一个执行指令就是调用另外一个初始化方法,这个初始化方法可能是自身类某个初始化方法,例如你的构造函数中第一句有类似this(...)这种语句,那么初始化方法就会调用自身类的指定构造方法;如果你的构造方法中没有指定构造方法调用,那么初始化方法会默认调用父类无参数初始化方法,如果你的子类第一句为 super(....),那么初始化方法会调用父类指定初始化方法。这种调用过程会递归进行调用,直到这个类是java.lang.Object类。
调用初始化方法并不代表会生成对象,你的java代码中出现new关键字加上构造方法的调用,只会生成一个对象,其父类对象不会生成。而且初始化方法对于虚拟机来说只是一个名称叫做" <init>"的普通方法,区别只是生成对象以后调用而已。
ps. 调用创建对象未必需要调用构造方法,比如反序列化。
第二个问题:参考 http://hxraid.iteye.com/blog/687660
0 0
- java中实例子类会有父类对象产生吗?如果不产生父类对象为什么子类有父类的属性和方法?
- 父类引用指向子类对象,为什么会调用的是子类中重新的方法
- java基础问题----------TreeSet里面放对象,如果同时放入了父类和子类的实例对象
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- python 中 类 子类 属性 方法 对象 self 理解
- JAVA中子类对象的实例化过程
- Java子类对象的实例化过程
- Java 父类和子类对象销毁实例
- (java)对象引用向上转型后,无法调用子类独有的方法和属性问题
- 子类对象的实例化
- 黑马程序员--java中父类和子类都有构造方法时,子类对象的初始化过程
- Java中子类对象的初始化
- Java中子类对象初始化的过程
- Lua自己实现如果对象是指定类或其子类的实例,返回 true
- 面向对象 子类中 < 重载 重写 >父类的方法
- JAVA中子类与父类对象的初始化顺序
- 类和子类对象的转换
- 使用nginx与nginx-rtmp-module搭建流媒体服务器
- Pixhawk--uORB深入学习
- 将javaweb工程打包成War包
- 剑指offer之编程(十五)
- 算法
- java中实例子类会有父类对象产生吗?如果不产生父类对象为什么子类有父类的属性和方法?
- main 函数和子函数的顺序关系
- 定位城市,显示名称
- c++ time.h显示程序运行时间
- Android 根据路径获取文件名
- sockaddr_in
- Android属性动画的简单使用方法
- Android实践 -- 使用FileProvider安全的共享文件 简介篇
- C语言实现五大排序算法