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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xc29417412 中级黑马   /  2015-1-14 00:01  /  1305 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Fu{
        int num = 5;                                 
        Fu(){                                                                               
               // System.out.println(num);                       
                                show();                              
                System.out.println(num);              //为什么结果是0  5
        }         

不会啊
        void show(){                                     0   
                                                        5
                System.out.println("55");
        }
}
class Zi extends Fu{
        int num = 3;

                 Zi(){}  

        void show() {                                
                                        System.out.println(num);                               
                                        }
}
class Demo3 {
        public static void main(String[] args) {
                Zi z = new Zi();                                   
                //Zi z = (Zi)f;
                //f.show();
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

2 个回复

倒序浏览
子类创建对象前,先访问父类构造函数,这你应知道。
这里创建的是子类对象(不管引用是谁),就意味着子类的show方法已经复写掉了父类的show方法。
也就是说父类的构造函数中调用的show方法是子类的show。
这里show方法调用的是num是子类的成员num,所以父类构造函数调用show的时候子类的num还没有被初始化,只有默认初始化值也就是0。

我以为是3和5
但是从运行结果可以看得出,子类对象的成员显示初始化前,就先访问父类构造函数。
具体为什么这样我就不得而知了。

评分

参与人数 1技术分 +2 收起 理由
杨佳名 + 2

查看全部评分

回复 使用道具 举报
晕死,这道题有点难度啊。考的是对内在结构的理解啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马