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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈cc 中级黑马   /  2015-8-17 23:18  /  486 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Fu{
        Fu(){
                //super();
                //调用的是子类的show方法,此时其成员变量num还未进行显示初始化
                show();
                return;
        }
        void show(){
                System.out.println("fu show");
        }
}
class Zi extends Fu{
        int num = 8;
        Zi(){
                //super();
                //通过super初始化父类内容时,子类的成员变量并未显示初始化,每super()父类初始化完毕后,才进行子类的成员变量显示初始化
                return;
        }
        void show(){
                System.out.println("zi show" + num);
        }
}
class ExtendsDemo2
{
        public static void main(String[] args){
                Zi z = new Zi();
                z.show();
                //Fu f = new Zi();
        }
}

请问当初始化父类时,子类并未初始化,那么int num,应该不存在的吧,怎么会输出zi show0呢?

4 个回复

正序浏览
学习了,谢谢分享
回复 使用道具 举报
不应该这样说,既然没有初始化子类,父类是完全没作用的。
回复 使用道具 举报
变量优先于构造代码块和构造函数出现     静态代码块>静态变量>成员变量>构造代码块>构造函数    父类初始化完一部分会先处理子类的对应部分 再初始化父类下一个类型
回复 使用道具 举报
初始化ExtendsDemo2这个类的时候自动加载子类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马