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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李慧兵 中级黑马   /  2015-9-26 19:32  /  469 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Fu{


        Fu(){
                int num=10;
        //调用的是子类的show方法,此时其成员变量num还未进行显示初始化

        show();
        //return;
        }
        void show(){
        System.out.println("fu show");
       
        }
}

class Zi extends Fu{

int num = 8;
Zi(){
        super();
//通过super初始化父类内容时,子类的成员变量并未显示初始化,等super()父类初始化
//完毕后,才进行子类的成员变量显示初始化

        }
        void show(){
        System.out.println("zi show..." +num);
        }


}
class ExtendsDemo2{
public static void main(String[] args){
Zi z = new Zi();
z.show();

}
}










。。。。。。。。。。。。。。。。。。。。。。。。。。
为什么上面打印的第一个结果是zi show...........0??????????/

2 个回复

倒序浏览
如果在调用z.show();的话结果是:20,估计这个才是你上一步期望的结果。这个就要搞清楚继承的初始化顺序了,Zi z=new Zi();
创建Zi对象时首先调用父类的默认构造方法,父类构造方法中调用show方法,输出num值,由于多态执行的show方法为zi类的show方法打印的是子类的num值,而此时子类num值还没有完成初始化所以为默认值0;故结果为0,若子类已经完成初始化则结果为20,也就是调用z.show()的结果
回复 使用道具 举报
太难了看不懂。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马