黑马程序员技术交流社区

标题: 构造方法疑惑 [打印本页]

作者: Aron    时间: 2014-6-22 18:54
标题: 构造方法疑惑
本帖最后由 Aron 于 2014-6-24 18:05 编辑
  1. public class Test extends A {

  2.         Test(){
  3.                 super();
  4.                 System.out.println("test");
  5.         }
  6.         {
  7.                 System.out.println("xixi");
  8.         }
  9.          public static void main(String[] args){
  10.                  A t = new Test();
  11.         }
  12. }

  13. class A{
  14.         A(){
  15.                 System.out.println("AA");
  16.         }
  17. }
复制代码
  1. 结果为:
  2. AA
  3. xixi
  4. test
复制代码
首先先说明我知道父类对象的一个引用指向子类对象会先访问父类 这个是由于子类构造方法中有一句隐式的super()语句
我想问的是构造代码块按理说不是会先于构造方法执行 但是确在访问父类super()后才执行 也就是说实际上是在super()访问父类过后才会去执行构造代码块 然后再执行构造方法中下面的语句
也就是执行顺序是(对于我写的程序来讲的执行顺序):新建对象访问test()构造方法然后执行super(),访问父类后在回来查找构造代码块如果有执行它,之后在执行super下面的语句
对不对
希望大家不要说什么父类 与 子类中这样那样的执行顺序 我都明白 我只是想确认我这个想法对不对
说明下你们的解释  谢谢了




作者: 18353666072    时间: 2014-6-22 19:14
对的,,,,,你知道为什么要先执行super么?
作者: 陈云阳    时间: 2014-6-22 19:31
继承就是先父后子的
执行顺序就是这样
父类--变量
父类--初始化块
父类--构造函数
子类--变量
子类--初始化块
子类--构造函数

作者: GoodBoy123    时间: 2014-6-22 22:58
构造代码块比构造方法先执行,是在同一个类里来说的。如果你在父类里再加上一个构造代码块的话第一个执行的就是父类的构造代码块,然后是父类的构造方法,接着是子类的构造代码块,再接着是子类的构造方法.
作者: Aron    时间: 2014-6-23 11:10
18353666072 发表于 2014-6-22 19:14
对的,,,,,你知道为什么要先执行super么?

不知道额  为什么啊?
作者: 黄宝宝    时间: 2014-6-23 11:28
围观中1
作者: 郑飞    时间: 2014-6-23 13:40
构造代码块不就是先与构造方法的么? 我记错了还是? 也求指教..
作者: 18353666072    时间: 2014-6-24 10:58
Aron 发表于 2014-6-23 11:10
不知道额  为什么啊?

因为A可能也有父类,A要操作数据前必须先看一下A的父类对数据做了什么操作,,,,
作者: Aron    时间: 2014-6-24 18:05
18353666072 发表于 2014-6-24 10:58
因为A可能也有父类,A要操作数据前必须先看一下A的父类对数据做了什么操作,,,, ...

soga  谢谢啦
作者: 18353666072    时间: 2014-6-25 09:40
Aron 发表于 2014-6-24 18:05
soga  谢谢啦

{:3_67:},,,,,
作者: Mr.Hao    时间: 2014-6-25 09:53
应该是必须首先建立父类,要不然没有父亲怎么能有儿子
作者: 王振2014    时间: 2014-6-25 10:18
学习了,,,,
作者: 王振2014    时间: 2014-6-25 10:40
看来可以看做是实例化一个子类对象之前会先实例化一个父类对象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2