当前位置: 代码迷 >> J2SE >> 关于继承,初始化。该怎么解决
  详细解决方案

关于继承,初始化。该怎么解决

热度:131   发布时间:2016-04-24 01:24:28.0
关于继承,初始化。。。。。
Java code
class Animal{    String color="red";        Animal(){        print();        color="black";    }        void print(){        System.out.println("animal color is "+color);    }}class Cat extends Animal{    String color="yellow";        Cat(){        print();        super.print();    }        void print(){        System.out.println("cat color is "+color);    }        public static void main(String[] args){        new Cat();    }}


结果是:
cat color is null
cat color is yellow
animal color is black


疑问:
1.当子类构造函数去调用父类构造函数时,如果父类构造函数中调用的成员函数被子类覆盖过,那么就用子类?
2.为什么是null? 显示初始化不是优先于构造函数么?当构造函数启动时,成员变量不是已经被显示初始化了么?





------解决方案--------------------
探讨
引用:
1.根据打印出来的结果,可以肯定是这样的。
2.之所以是null是因为当父类调用子类的print方法时,子类的color变量还没有执行初始化。显示初始化……

多谢的你的回答,很不想为这样的问题浪费那么多时间,说不定这辈子也就遇到这一次了,但还是想了解。。:
能否这样理解,当jvm执行到子类构造函数的super()之前,已经做好了什么事?真是太痛苦了遇到”先有鸡还……
  相关解决方案