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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cmcm2014 中级黑马   /  2014-3-24 16:18  /  1444 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 cmcm2014 于 2014-3-24 17:36 编辑

看到网上有一道面试题,一直不理解,今天发出来,希望得到解答。题目如下:答案是X=1,Y=0.
请问下ClassB中构造函数、字段y和PrintFields方法的先后顺序,X=1不难理解,但Y=0不太理解,求解答,谢谢

question.jpg (44.62 KB, 下载次数: 24)

question.jpg

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

4 个回复

倒序浏览
程序先初使化B类的字段,然后运行到public B()这句的时候会执行A类的构造函数,因为A类的构造函数里调用了PrintFields()这个方法,而这个方法又是可以重写的方法,所以运行到A类的构造函数时执行PrintFields的重写了的B类里的PrintFields方法,当运行到B类时的PrintFields方法时,由于Y值在初使化时未赋值,所以Y默认是0,而X一直未变动,所以还是1,如果在NEW出B类后再执行B类的PrintFields方法,那么因为B类已经执行完构造函数,Y值已经被修改为-1,所以会输出-1
回复 使用道具 举报
程序先执行A类的构造函数 调用PrintFields()方法 因为B类重写了A类的方法所以调用的是B类的方法 会输出x和y的初始值1和0
回复 使用道具 举报
mdb 发表于 2014-3-24 16:50
程序先初使化B类的字段,然后运行到public B()这句的时候会执行A类的构造函数,因为A类的构造函数里调用了P ...

兄弟说的很详细,看了一遍我一下就理解了,非常感谢:handshake
回复 使用道具 举报
1楼正解,你在new B的实例之前设置一个断点,然后F11一步一步调试,你就能知道程序的具体运行过程了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马