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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

01. class Fu{
02. Fu(){
03. super();
04. //调用的是子类的show方法,此时其成员变量num还未进行显示初始化
05. show();
06. return;
07. }
08. void show(){
09. System.out.println("fu show" );
10. }
11. }
12. class Zi extends Fu{
13. int num = 8;
14. Zi(){
15. super();
16. //通过super初始化父类内容时,子类的成员变量并未显示初始化,等super()父类初始化
完毕后,才进行子类的成员变量显示初始化
17. return;
18. }
19. void show(){
20. System.out.println("zi show..." + num);
21. }
22. }
23. class ExtendDemo{
24. public static void main(String[] args){
25. Zi z = new Zi();
26. z.show();
27. }
28. }

2 个回复

倒序浏览
首先,,父类中的super()方法当然是调用父类的父类,,没有写的话,所有类都继承自Object类,,这是所有类的父类,,于是父类中的这个super()方法什么也没有..

这个题的执行顺序是先main()方法,,,--创建一个Zi类对象,,,因为Zi对象有继承关系,,所以默认的先执行父类的构造方法--就是Fu().,,,这个方法中是一个super()方法,,什么也没发生,,接着执行父类中的show()方法,,,这时系统突然发现,,子类与父类中都有show()方法,,且写法完全相同,,,于是就出现了继承中的重写,,,在继承关系中只要出现重写,,就会从最底层开始执行,,就是从子类的show(),方法开始执行,,子类的show(),方法就是输出zi show...num,,,但这时的num根本就没有初始化,,于是这时的num就是一个0,,,于是执行return,返回,,
接着就是子类的事了,,执行子类的构造函数,,--初始化num=8,,---子类的对象z调用show()方法,,输出zi show...num,,,这时的num已经初始化了,,于是这里的num是8.
结果显示是:
zi show...0
zi show...8
回复 使用道具 举报
非常感谢,了解了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马