黑马程序员技术交流社区

标题: 求教一个问题!!!!! [打印本页]

作者: 李慧兵    时间: 2015-9-26 19:32
标题: 求教一个问题!!!!!
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??????????/
作者: 饰演自己    时间: 2015-9-26 19:57
如果在调用z.show();的话结果是:20,估计这个才是你上一步期望的结果。这个就要搞清楚继承的初始化顺序了,Zi z=new Zi();
创建Zi对象时首先调用父类的默认构造方法,父类构造方法中调用show方法,输出num值,由于多态执行的show方法为zi类的show方法打印的是子类的num值,而此时子类num值还没有完成初始化所以为默认值0;故结果为0,若子类已经完成初始化则结果为20,也就是调用z.show()的结果
作者: dai2686779    时间: 2015-9-26 20:05
太难了看不懂。。。。。。。




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