黑马程序员技术交流社区

标题: 视频就要看重点,要深度思考问题(object向上上转型问题 [打印本页]

作者: boboyuwu    时间: 2015-9-2 11:13
标题: 视频就要看重点,要深度思考问题(object向上上转型问题
本帖最后由 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,求大牛解释

作者: 殷俊    时间: 2015-9-2 11:34
这是向下转型,不是向上转型
作者: fmi110    时间: 2015-9-2 12:13
Object类中没有定义成员变量num,所以就算ob指向了new text()这片内存,num变量对于ob来说还是不可见的
类只能访问自己的成员变量和调用自己的成员方法,你叫它访问对它来说不存在的(实际存在,对它来说是不可见的)东西,必然出错啊
num 是Text类的成员变量,你将ob转换成text类后,num对其才是可访问的   ((text)ob).num  这种形式
作者: boboyuwu    时间: 2015-9-2 12:21
殷俊 发表于 2015-9-2 11:34
这是向下转型,不是向上转型

别逗好不   object类型引用指向自己子类对象是向下转型?   
作者: 殷俊    时间: 2015-9-2 12:27
本帖最后由 殷俊 于 2015-9-2 12:30 编辑
boboyuwu 发表于 2015-9-2 12:21
别逗好不   object类型引用指向自己子类对象是向下转型?

好吧,你继续
作者: boboyuwu    时间: 2015-9-2 12:30
本帖最后由 boboyuwu 于 2015-9-2 12:33 编辑
殷俊 发表于 2015-9-2 12:27
父类引用指向子类对象是向下转,你可以再多看看视频

其实他们都没看到我的良苦用心,你发现的才是重点
作者: 殷俊    时间: 2015-9-2 12:43
boboyuwu 发表于 2015-9-2 12:30
其实他们都没看到我的良苦用心,你发现的才是重点

{:3_58:}别笑我,一时脑袋蒙b了,不好意思
作者: wunairensheng95    时间: 2015-9-2 15:49
因为Object中没有成员变量num
作者: wunairensheng95    时间: 2015-9-2 15:51
text中没有复写equals方法  所以继承父类Object中的equals   Object中的equals比较的是对象的地址  这明显是多态  多态的概念是同一个对象在不同时刻表现出的不同形态  所以肯定是同一个对象  所以地址肯定相同
作者: wunairensheng95    时间: 2015-9-2 15:53
殷俊 发表于 2015-9-2 12:43
别笑我,一时脑袋蒙b了,不好意思

俊哥也在啊  刚看见 是不是还没醒酒呢。。。。。
作者: wunairensheng95    时间: 2015-9-2 15:55
同学 你这思考的还不深 刚才看见一位学弟的问题   问的真的很有水准  我都快崩溃了   http://bbs.itheima.com/thread-233453-1-1.html
作者: boboyuwu    时间: 2015-9-2 16:51
wunairensheng95 发表于 2015-9-2 15:55
同学 你这思考的还不深 刚才看见一位学弟的问题   问的真的很有水准  我都快崩溃了   http://bbs.itheima.c ...

那你解释一下   假如Object中有成员变量num,我没有创建object对象,也没有变量指向它,    变量ob指向的是new text( ),那么为什么ob.num访问的是object中的num而不是text中的num呢?
作者: wunairensheng95    时间: 2015-9-2 17:51
text里边还没有equals呢。。。为什么能用Object里边的equals?对于继承 在多态状况下,成员变量只能访问父类中的成员变量,对于成员方法,不能访问子类特有的成员方法,如果被复写,则使用子类复写的成员方法
作者: boboyuwu    时间: 2015-9-2 18:16
本帖最后由 boboyuwu 于 2015-9-2 18:25 编辑
wunairensheng95 发表于 2015-9-2 17:51
text里边还没有equals呢。。。为什么能用Object里边的equals?对于继承 在多态状况下,成员变量只能访问父 ...

对于继承 在多态状况下,成员变量只能访问父类中的成员变量,对于成员方法,不能访问子类特有的成员方法,如果被复写,则使用子类复写的成员方法
这个是Java规定的吧   我老是在想为什么要这样想的头都疼了

作者: 殷俊    时间: 2015-9-2 18:25
wunairensheng95 发表于 2015-9-2 15:53
俊哥也在啊  刚看见 是不是还没醒酒呢。。。。。

你是谁?
作者: 比特    时间: 2015-9-2 20:47
你说的不对吧!!!!
作者: wunairensheng95    时间: 2015-9-3 08:33
boboyuwu 发表于 2015-9-2 18:16
对于继承 在多态状况下,成员变量只能访问父类中的成员变量,对于成员方法,不能访问子类特有的成员方法, ...

应该是规定吧。。。写虚拟机的那些人规定的




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