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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

3:看程序写结论。最好自己分析,先不要运行看结果。
        class Fu
        {
                public int num = 10;

                public Fu()
                {
                        System.out.println("fu");
                }
        }

        class Zi extends Fu
        {
                public int num = 20;

                public Zi()
                {
                       
                        System.out.println("zi");
                }

                public void show()
                {
                        int num = 30;
                        System.out.println(num);       
                        System.out.println(this.num);       
                        System.out.println(super.num);       
                }
        }

        class Test
        {
                public static void main(String[] args)
                {
                        Zi z = new Zi();//fu,zi
                        z.show();//30,20,10
                }
        }

4 个回复

倒序浏览
实例化对象时会先去执行类的构造函数,当该类有父类时会先执行父类的构造函数再执行自己的构造函数(可以理解为先有父亲才有儿子,
所以在实例化zi时会先执行父类的构造函数打印fu,再执行子类的构造函数打印zi
然后打印num,因为函数的执行是先查找函数内部变量,如果没有则向上查找,而show中有定义变量num,故先打印show函数内部的num也就是30
然后是执行打印this.num,this指代的是类本身也就是类自己的成员变量也就是zi的成员变量num,也就是20
然后打印super.sum,super,是代表父类,super.num也就会父类中查找成员变量num,打印父类成员变量也就是fu的成员变量num,也就是10
回复 使用道具 举报
HiGodl 发表于 2015-9-20 10:56
实例化对象时会先去执行类的构造函数,当该类有父类时会先执行父类的构造函数再执行自己的构造函数(可以理 ...

谢谢哈哈!!!
回复 使用道具 举报
GG,我还在自学
回复 使用道具 举报
这样都能得这么多的黑马币   长见识了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马