A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多态父类引用指向子类对象的时候,构造方法是怎么调用和运行的啊?哪位大神帮忙解惑啊

11 个回复

倒序浏览
路过!!!!!!
回复 使用道具 举报
太难了。。。。不懂
回复 使用道具 举报
利用断点先把程序好好看一遍!
回复 使用道具 举报
* 成员变量
        * 编译看左边(父类),运行看左边(父类)。

* 成员方法
        * 编译看左边(父类),运行看右边(子类)。

* 静态方法
        * 编译看左边(父类),运行看左边(父类)。
        * (静态和类相关,算不上重写,所以,访问还是左边的)
        * 只有非静态的成员方法,编译看左边,运行看右边
回复 使用道具 举报
推荐看看老师的视频
回复 使用道具 举报
Fu f = new Zi(); 就那这个来说,首先加载父类.class文件,然后加载子类.class 文件,
然后调用子类构造函数,而子类构造方法首行如果没有用super有参构造指定,则有个默认的super的空参构造,
那么找到父类的空参构造,而父类空参构造方法的第一行也有super();这个默认的语句,因为所有类都有个根类Object.
然后进行父类成员变量的显示初始化,然后如果父类有构造代码块就执行构造构造代码块初始化,然后再执行父类构造方法中的方法体。
然后相当于Zi () { } 中首行super()语句执行完毕,然后进行子类的显示初始化,
接下来如果子类中有构造代码块,则执行子类的构造代码块,然后再执行子类构造方法中的方法体。
回复 使用道具 举报
编译看左边(父类),运行看右边(子类)
回复 使用道具 举报
豆豆的小幸福 发表于 2015-11-9 00:19
Fu f = new Zi(); 就那这个来说,首先加载父类.class文件,然后加载子类.class 文件,
然后调用子类构造函 ...

恩啊   谢谢啦
回复 使用道具 举报
转来转去啊,感觉都晕了
回复 使用道具 举报
父类静态块--->子类静态块--->父类初始化语句--->父类构造函数--->子类初始化语句--->子类构造器
回复 使用道具 举报
这个还真不知道
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马