黑马程序员技术交流社区

标题: 继承体系中的同名变量访问 [打印本页]

作者: 杜天伟    时间: 2013-7-14 16:30
标题: 继承体系中的同名变量访问
本帖最后由 杨兴庭 于 2013-7-15 11:55 编辑

一个继承体系:A继承自B,B继承自C.B和C类中都定义了相同名称的变量int x,那么建立A的对象后,怎么访问到C中的变量x,呢?
作者: 白堇翎    时间: 2013-7-14 16:34
再建立一个C的对象
作者: 薛淑凯    时间: 2013-7-14 17:53
A对象和C对象中的变量没什么关系,new一个C就完了
作者: 王海旺    时间: 2013-7-14 18:14
同样有这样的问题!!! 求大神指教 最好详细举例
作者: 杜天伟    时间: 2013-7-14 20:36
薛淑凯 发表于 2013-7-14 17:53  A对象和C对象中的变量没什么关系,new一个C就完了

为什么没关系呢?不是继承么?
作者: 白堇翎    时间: 2013-7-14 20:58
杜天伟 发表于 2013-7-14 20:36
为什么没关系呢?不是继承么?

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

举个例子
儿子和爸爸都继承了爷爷的白色头发特征.
现在儿子觉得白色头发不好看,染成了黑色.跟爷爷,爸爸是白色头发毫无关系.
你如果想要把爷爷或爸爸的头发也染成黑色,那就只能new一个爷爷/爸爸
作者: 李江    时间: 2013-7-14 21:21
这个试了试没能通过new A去调用C中的变量,一般向上转型比较常见,向下转型不太常见吧
作者: 杜天伟    时间: 2013-7-14 21:27
白堇翎 发表于 2013-7-14 20:58  首先我不太清楚这个ABC的继承关系  是A继承自B,B继承自C还是反过来  

a是最子的类。
作者: 诸隆隆    时间: 2013-7-14 22:14
既然是继承,那么A肯定拥有父类拥有的属性。但你又定义了一次覆盖住了父类的属性,当然不能访问到C中的x了。打个比方,你既然拥有一件和你老爸同样属性的东西,你使用的时候肯定是先拿着自己的使。只有子类没有的属性,编译器才向上找父类啊。
作者: 杜天伟    时间: 2013-7-14 22:50
诸隆隆 发表于 2013-7-14 22:14  既然是继承,那么A肯定拥有父类拥有的属性。但你又定义了一次覆盖住了父类的属性,当然不能访问到C中的x了 ...

变量也可以覆盖吗?
作者: wll_sx1990    时间: 2013-7-14 22:57
这是访问不到C中的数据的。因为B中的数据将父类中的数据覆盖了,为什么必须要C中的数据呢,在java中子类存在的意义就是增强父类的功能,你要这样做不是与java继承思想相悖了么。
作者: 诸隆隆    时间: 2013-7-15 09:33
杜天伟 发表于 2013-7-14 22:50
变量也可以覆盖吗?

嗯。当然。别纠结这个问题了,真的很鸡肋
作者: 黄基焜    时间: 2013-7-15 13:28
就是看引用,哪个引用类型就用哪个;变量不存在覆盖,当然在继承中也可以用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;




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