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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小漠 中级黑马   /  2014-10-5 20:26  /  3786 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小漠 于 2014-10-5 21:18 编辑

class X {
        Y b = new Y();
        X() {
                        System.out.print("X");
        }
}

class Y {
        Y() {
                        System.out.print("Y");
        }
}

public class Z extends X {
        
        Y y = new Y();
        Z() {
                        System.out.print("Z");
        }

        public static void main(String[] args) {
                        new Z();
        }
}

评分

参与人数 2技术分 +1 黑马币 +20 收起 理由
水竹 + 20 我要分没用
敏敏好学 + 1

查看全部评分

22 个回复

正序浏览
z extends x  
有默认的super () 所以先有x类中的y实例化(第一个Y),然后是x类构造方法输出(第二个位置的X), 然后又是Z类中有Y实例化,然后又是Z类自己的构造方法的输出(最后一个Z)   这样不就是YXYZ
回复 使用道具 举报
来学习一下啊
回复 使用道具 举报
学习了也
回复 使用道具 举报
学习了                     
回复 使用道具 举报
18643448863 发表于 2014-10-5 21:42
不是说子类构造函数的第一行 是默认的 super() 么 为啥你这个没有执行?

不好意思  我说的有点快 我昨天说的是   Z类构造函数压栈   由因为Z继承X  X是父类  X的构造函数就压栈   这句话的意思就代表了 子类构造函数中的super( )    你说对吗????
           ------------------------------如果我说的不对请提醒我 ,谢谢  
回复 使用道具 举报
小漠 发表于 2014-10-5 21:17
现在明白了,脑子转的慢,嘿嘿,非常感谢耐心讲解

不谢  大家一起学习  都是从你这个时候过来的  加油!!!
回复 使用道具 举报
18643448863 发表于 2014-10-5 22:40
再说 一楼没解决问题 二楼解决了  管理还会看三楼么?

再说楼主是什么时候完全明白的?是不是又看了一眼视频?按照你的说法那怎么不给毕老师一分,毕竟他才是真正解决问题的人!
回复 使用道具 举报
18643448863 发表于 2014-10-5 22:38
管理员的评分我来回答你吧,首先你在一楼的贴图 这些没有解决实际问题,就像我 你贴图里面的知识点 我都 ...

你都记得你还不会那是你的问题,那是你不懂的地方,不是楼主不懂的地方,你跟楼主不懂的地方又不是一处。
我把图片里面的所有字自己打一遍回复出来他不给我技术分??难道回答的字数少就有问题??难道我就未卜先知应该知道其实你是更基础的地方不知道而不是更困难的地方不知道??
再者难道每个想获得技术分的人回答都要把特简单的问题说的冗长复杂?要是这样那有人问个java有什么特点是不是我要把所有Java的特性都说一遍才能得分??是不是回答个有关网络的细节问题我就要写篇七八百字的总结出来??
我另一个帖子里面也是只回复了两行,但是把楼主的问题解决了,而且还是第一个说出原因的,但是我下面那楼的哥们儿直接贴了个跟楼主问题屁事不关的代码,人家直接得了一分,那又是怎么回事?
回复 使用道具 举报
水竹 发表于 2014-10-5 22:27
先说你上一楼说的那句话,默认的super()当然执行了,要不执行的话就没X类什么事了。
然后说说调用一个构 ...

再说 一楼没解决问题 二楼解决了  管理还会看三楼么?
回复 使用道具 举报
水竹 发表于 2014-10-5 22:27
先说你上一楼说的那句话,默认的super()当然执行了,要不执行的话就没X类什么事了。
然后说说调用一个构 ...

管理员的评分我来回答你吧,首先你在一楼的贴图 这些没有解决实际问题,就像我 你贴图里面的知识点 我都记得。也知道什么意思也知道 子类代码快中有默认的父类无参数代码块 但是还是不明白 整个过程 二楼晚了你一点 但是写的挺好的 至少 我一直在看二楼 根据二楼的思想去 思考 你之后给楼主解决问题 那个时候 更不用谈了 分开分部的解决问题 怎么给技术分? 每个回答都不完整  好像有个贴 写了 给技术分的规则 你可以去看看 是必须要 完整的 一次性解释好问题的 才给的
回复 使用道具 举报
18643448863 发表于 2014-10-5 22:12
我一直在想 为什么是YXYZ,为什么不是YYXZ

先说你上一楼说的那句话,默认的super()当然执行了,要不执行的话就没X类什么事了。
然后说说调用一个构造函数要做什么事情。
构造函数是为了创建出一个新的对象,它当然不可能只执行了你在里面写的那句输出语句,因为它还要在堆里给新对象分配一个空间出来啊,这个空间分配出来之后,才是你自己写的用来初始化的语句,要不然的话你写个this.name="小明",这个"小明"要存在哪里?
而在分配空间这个过程中,其实分为好多步骤,其中有一步就是建立对象的特有属性,并进行默认初始化,也就是输出两个Y的那里。
算了,不说了,忽然没兴致了,真搞不懂那些管理员怎么评技术分的,我说的清清楚楚明明白白正正确确,还是在别人前面回答出来的,提问的得分了,后面回答的得分了,就我不得分,我贴了那么大张图在那里,说没看见骗鬼都不信!
没兴致了,不说了。

评分

参与人数 1黑马币 +4 收起 理由
小漠 + 4 我的黑马币不多,意思意思吧。。。谢谢你,.

查看全部评分

回复 使用道具 举报
liaorubei 发表于 2014-10-5 20:47
一个对象的实例化,如果有父类,并且子类的构造函数并没有显示调用父类的构造函数的话,会先运行父类的构造函 ...

我一直在想 为什么是YXYZ,为什么不是YYXZ
回复 使用道具 举报
光头强 发表于 2014-10-5 21:11
首先 , new Z ( ) , Z类的构造函数压栈 , 由因为Z继承X  X是父类  X的构造函数压栈  , X给对象进行初始化 , ...

不是说子类构造函数的第一行 是默认的 super() 么 为啥你这个没有执行?
回复 使用道具 举报
果断没看懂,有看懂了的没? 写详细点 怎么个过程  
回复 使用道具 举报
小漠 中级黑马 2014-10-5 21:17:44
9#
光头强 发表于 2014-10-5 21:11
首先 , new Z ( ) , Z类的构造函数压栈 , 由因为Z继承X  X是父类  X的构造函数压栈  , X给对象进行初始化 , ...

现在明白了,脑子转的慢,嘿嘿,非常感谢耐心讲解
回复 使用道具 举报
小漠 中级黑马 2014-10-5 21:16:00
8#
水竹 发表于 2014-10-5 20:55
对,因为它前面没有写static,也就是说是每个该类的对象都有的,所以就是特有属性。 ...

又看了一眼视频,把迷糊的终于明白了,谢谢~
回复 使用道具 举报
首先 , new Z ( ) , Z类的构造函数压栈 , 由因为Z继承X  X是父类  X的构造函数压栈  , X给对象进行初始化 , 首先 , new Y 类子类对象 , 输出Y , 他是X类的成员变量 , 而X类的构造函数只是简单的输出语句  , 并没有做别的事情 , 所以打印X , 父类已经给显示完毕   接下来我们该看子类的  , 子类又是先new Y的对象  , 输出Y , 构造函数输出Z   子类初始化完毕 , 打印结果YXYZ
回复 使用道具 举报
liaorubei 发表于 2014-10-5 20:47
一个对象的实例化,如果有父类,并且子类的构造函数并没有显示调用父类的构造函数的话,会先运行父类的构造函 ...

好像明白了,谢谢~~:lol
回复 使用道具 举报
小漠 发表于 2014-10-5 20:53
Y b = new Y();属于特有属性?

对,因为它前面没有写static,也就是说是每个该类的对象都有的,所以就是特有属性。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马