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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜天伟 中级黑马   /  2013-7-14 16:30  /  1381 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-15 11:55 编辑

一个继承体系:A继承自B,B继承自C.B和C类中都定义了相同名称的变量int x,那么建立A的对象后,怎么访问到C中的变量x,呢?

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

12 个回复

倒序浏览
再建立一个C的对象
回复 使用道具 举报
A对象和C对象中的变量没什么关系,new一个C就完了
回复 使用道具 举报
同样有这样的问题!!! 求大神指教 最好详细举例
回复 使用道具 举报
杜天伟 来自手机 中级黑马 2013-7-14 20:36:46
报纸
薛淑凯 发表于 2013-7-14 17:53  A对象和C对象中的变量没什么关系,new一个C就完了

为什么没关系呢?不是继承么?
回复 使用道具 举报
杜天伟 发表于 2013-7-14 20:36
为什么没关系呢?不是继承么?

首先我不太清楚这个ABC的继承关系
是A继承自B,B继承自C还是反过来

举个例子
儿子和爸爸都继承了爷爷的白色头发特征.
现在儿子觉得白色头发不好看,染成了黑色.跟爷爷,爸爸是白色头发毫无关系.
你如果想要把爷爷或爸爸的头发也染成黑色,那就只能new一个爷爷/爸爸

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李江 中级黑马 2013-7-14 21:21:07
7#
这个试了试没能通过new A去调用C中的变量,一般向上转型比较常见,向下转型不太常见吧
回复 使用道具 举报
杜天伟 来自手机 中级黑马 2013-7-14 21:27:48
8#
白堇翎 发表于 2013-7-14 20:58  首先我不太清楚这个ABC的继承关系  是A继承自B,B继承自C还是反过来  

a是最子的类。
回复 使用道具 举报
既然是继承,那么A肯定拥有父类拥有的属性。但你又定义了一次覆盖住了父类的属性,当然不能访问到C中的x了。打个比方,你既然拥有一件和你老爸同样属性的东西,你使用的时候肯定是先拿着自己的使。只有子类没有的属性,编译器才向上找父类啊。

评分

参与人数 1技术分 +1 收起 理由
赵海洋 + 1 赞一个!

查看全部评分

回复 使用道具 举报
杜天伟 来自手机 中级黑马 2013-7-14 22:50:18
10#
诸隆隆 发表于 2013-7-14 22:14  既然是继承,那么A肯定拥有父类拥有的属性。但你又定义了一次覆盖住了父类的属性,当然不能访问到C中的x了 ...

变量也可以覆盖吗?
回复 使用道具 举报
这是访问不到C中的数据的。因为B中的数据将父类中的数据覆盖了,为什么必须要C中的数据呢,在java中子类存在的意义就是增强父类的功能,你要这样做不是与java继承思想相悖了么。
回复 使用道具 举报
杜天伟 发表于 2013-7-14 22:50
变量也可以覆盖吗?

嗯。当然。别纠结这个问题了,真的很鸡肋
回复 使用道具 举报
就是看引用,哪个引用类型就用哪个;变量不存在覆盖,当然在继承中也可以用super调用父类的.
A继承自B,B继承自C.B和C类中都定义了相同名称的变量int x
A a = new A();-->用A的x;
B b = new A();-->用B的x;
C c = new A();-->用C的x;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马