当前位置: 代码迷 >> J2SE >> java 生成子对象,1定会新建一个父类对象吗
  详细解决方案

java 生成子对象,1定会新建一个父类对象吗

热度:91   发布时间:2016-04-23 20:43:27.0
java 生成子对象,一定会新建一个父类对象吗?

class father
{
}
class son extends father
{
  public static void main(String[] args)
  {
      son s=new son();//这里先产生一个父类,再产生一个子类吗?
  }
}

越学越糊涂,
求权威解答
------解决方案--------------------
是去执行了父类的构造方法,不是生成了一个父类实例
------解决方案--------------------
没爹哪来的儿子
你子类的构造函数会调用父类的构造函数的!

------解决方案--------------------
class 圣父 {}
class 圣子 extends 圣父 {}
class 圣灵 extends 圣子 {}

下面的代码,不会有单独的一个与a没关系的圣父/圣子,他们是三位一体的
圣灵 a = new 圣灵();

------解决方案--------------------
当然,真正的“三位一体”,上面这三者,不是extends关系
------解决方案--------------------
子类在创建实例后,类初始化方法会调用父类的初始化方法(除了java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法。
这个地方是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即" <init>"方法,初始化方法由java源程序的三个部分组成的,一个部分是成员字段后的直接的初始化语句,例如private int i=0;,第二个部分是由初始化块组成,例如:public class Test{ { this.i=4; \\do something...... } }
第三个部分就是java源代码中的构造方法中的代码,java源代码中有几个构造方法,那么class文件中就有几个初始化方法,编译器会把第一部分与第二部分分别复制到每个初始化方法的前端,然后把初始化方法对应参数的构造方法的代码复制到相应初始化方法中
调用初始化方法并不会生成对象
想象你的父类是一个抽象类,那么抽象类又如何能够产生对象呢