黑马程序员技术交流社区

标题: 一道面试题,求解惑 [打印本页]

作者: cmcm2014    时间: 2014-3-24 16:18
标题: 一道面试题,求解惑
本帖最后由 cmcm2014 于 2014-3-24 17:36 编辑

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

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

question.jpg

作者: mdb    时间: 2014-3-24 16:50
程序先初使化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
作者: 崔增阳    时间: 2014-3-24 17:15
程序先执行A类的构造函数 调用PrintFields()方法 因为B类重写了A类的方法所以调用的是B类的方法 会输出x和y的初始值1和0

作者: cmcm2014    时间: 2014-3-24 17:15
mdb 发表于 2014-3-24 16:50
程序先初使化B类的字段,然后运行到public B()这句的时候会执行A类的构造函数,因为A类的构造函数里调用了P ...

兄弟说的很详细,看了一遍我一下就理解了,非常感谢:handshake
作者: 白夜行    时间: 2014-3-24 17:18
1楼正解,你在new B的实例之前设置一个断点,然后F11一步一步调试,你就能知道程序的具体运行过程了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2