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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 boboyuwu 于 2015-9-2 11:16 编辑

        大家注意我这个例子:

   class  text{
                       int num;
                    }                                           我们向上转型Object ob=new text();
                                                                 为什么无法通过ob变量访问num了.

我下面写了这段代码测试:   text t=new text();
                                                 Object ob=t;
                                                 System.out.print(ob.equals(t));    结果是true    说明ob跟t的值一样的都是指向了new text()这片空间,到这我就不明白了都指向相同的空间为什么ob无法访问num,求大牛解释

17 个回复

正序浏览
boboyuwu 发表于 2015-9-2 18:16
对于继承 在多态状况下,成员变量只能访问父类中的成员变量,对于成员方法,不能访问子类特有的成员方法, ...

应该是规定吧。。。写虚拟机的那些人规定的
回复 使用道具 举报
你说的不对吧!!!!
回复 使用道具 举报
wunairensheng95 发表于 2015-9-2 15:53
俊哥也在啊  刚看见 是不是还没醒酒呢。。。。。

你是谁?
回复 使用道具 举报
本帖最后由 boboyuwu 于 2015-9-2 18:25 编辑
wunairensheng95 发表于 2015-9-2 17:51
text里边还没有equals呢。。。为什么能用Object里边的equals?对于继承 在多态状况下,成员变量只能访问父 ...

对于继承 在多态状况下,成员变量只能访问父类中的成员变量,对于成员方法,不能访问子类特有的成员方法,如果被复写,则使用子类复写的成员方法
这个是Java规定的吧   我老是在想为什么要这样想的头都疼了
回复 使用道具 举报
text里边还没有equals呢。。。为什么能用Object里边的equals?对于继承 在多态状况下,成员变量只能访问父类中的成员变量,对于成员方法,不能访问子类特有的成员方法,如果被复写,则使用子类复写的成员方法
回复 使用道具 举报
wunairensheng95 发表于 2015-9-2 15:55
同学 你这思考的还不深 刚才看见一位学弟的问题   问的真的很有水准  我都快崩溃了   http://bbs.itheima.c ...

那你解释一下   假如Object中有成员变量num,我没有创建object对象,也没有变量指向它,    变量ob指向的是new text( ),那么为什么ob.num访问的是object中的num而不是text中的num呢?
回复 使用道具 举报
同学 你这思考的还不深 刚才看见一位学弟的问题   问的真的很有水准  我都快崩溃了   http://bbs.itheima.com/thread-233453-1-1.html
回复 使用道具 举报
殷俊 发表于 2015-9-2 12:43
别笑我,一时脑袋蒙b了,不好意思

俊哥也在啊  刚看见 是不是还没醒酒呢。。。。。
回复 使用道具 举报
text中没有复写equals方法  所以继承父类Object中的equals   Object中的equals比较的是对象的地址  这明显是多态  多态的概念是同一个对象在不同时刻表现出的不同形态  所以肯定是同一个对象  所以地址肯定相同
回复 使用道具 举报
因为Object中没有成员变量num
回复 使用道具 举报
boboyuwu 发表于 2015-9-2 12:30
其实他们都没看到我的良苦用心,你发现的才是重点

{:3_58:}别笑我,一时脑袋蒙b了,不好意思
回复 使用道具 举报
本帖最后由 boboyuwu 于 2015-9-2 12:33 编辑
殷俊 发表于 2015-9-2 12:27
父类引用指向子类对象是向下转,你可以再多看看视频

其实他们都没看到我的良苦用心,你发现的才是重点

点评

好吧,我错了,  发表于 2015-9-2 12:35
回复 使用道具 举报
本帖最后由 殷俊 于 2015-9-2 12:30 编辑
boboyuwu 发表于 2015-9-2 12:21
别逗好不   object类型引用指向自己子类对象是向下转型?

好吧,你继续
回复 使用道具 举报
殷俊 发表于 2015-9-2 11:34
这是向下转型,不是向上转型

别逗好不   object类型引用指向自己子类对象是向下转型?   
回复 使用道具 举报
Object类中没有定义成员变量num,所以就算ob指向了new text()这片内存,num变量对于ob来说还是不可见的
类只能访问自己的成员变量和调用自己的成员方法,你叫它访问对它来说不存在的(实际存在,对它来说是不可见的)东西,必然出错啊
num 是Text类的成员变量,你将ob转换成text类后,num对其才是可访问的   ((text)ob).num  这种形式
回复 使用道具 举报
这是向下转型,不是向上转型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马