java 子类的实例化和代码块初始化过程

1,子类的实例化函数

  1,子父类中的构造函数的特色。this

  在子类构造对象时,发现,访问子类构造函数时,父类也运行了。
  为何呢?
  缘由是:在子类的构造函数中第一行有一个默认的隐式语句。 super();

  子类的实例化过程:子类中全部的构造函数默认都会访问父类中的空参数的构造函数。
   
  为何子类实例化的时候要访问父类中的构造函数呢?
  那是由于子类继承了父类,获取到了父类中内容(属性),因此在使用父类内容以前,
  要先看父类是如何对本身的内容进行初始化的。

  因此子类在构造对象时,必须访问父类中的构造函数。
  为何完成这个必须的动做,就在子类的构造函数中加入了super()语句。

  若是父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用
  父类中哪一个构造函数。同时子类构造函数中若是使用this调用了本类构造函数时,
  那么super就没有了,由于super和this都只能定义第一行。因此只能有一个。
  可是能够保证的是,子类中确定会有其余的构造函数访问父类的构造函数。


  注意:supre语句必需要定义在子类构造函数的第一行。由于父类的初始化动做要先完成。spa

    1,子类构造时会经过super()方法先构造父类(子类的全部构造函数都会访问父类中空参数的构造函数,若是父类中没有空参构造函数,在子类重要添加super()在    子类  的构造第一行)。对象

    2,构造函数不存在继承和覆盖blog

  

  

  

   2,一个对象实例化过程:
  Person p = new Person();
  1,JVM会读取指定的路径下的Person.class文件,并加载进内存,
      并会先加载Person的父类(若是有直接的父类的状况下).
  2,在堆内存中的开辟空间,分配地址。
  3,并在对象空间中,对对象中的属性进行默认初始化。
  4,调用对应的构造函数进行初始化。
  5,在构造函数中,第一行会先到调用父类中构造函数进行初始化
  6,父类初始化完毕后,在对子类的属性进行显示初始化
  7,在进行子类构造函数的特定初始化。
  8,初始化完毕后,将地址值赋值给引用变量.继承

2,代码块初始化过程内存

相关文章
相关标签/搜索