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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王震 中级黑马   /  2013-6-20 23:13  /  1955 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Chinese c=new Chinese(name,sex,age,color);
Person p=c;//其中Chinese是Person的子类,color是Chinese的特有字段
p 和 c所指的对象是一样的 为什么p.color访问不到。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

5 个回复

倒序浏览
p是Person类型的,而person没有color属性,p当然访问不到拉。。
还有p和c所指的地址是不一样的
这里Person p=c是值传递,不是引用传递

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 蔡志涛 于 2013-6-21 10:19 编辑

我觉的你没有把字段和属性的概念彻底搞清楚,你说color是Chinese特有的字段,那么字段的修饰符应该是private,Person类当然访问不到了。还有就是color是属性的话也是访问不到的,因为p是Person类型的,而person没有color属性,也没有继承任何有color属性的类,所以访问不到,它总不能从它的子类Chinese中继承吧,那样的话世界就乱了。。。。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
虽然你把c的实例赋值给了p ,但是p 还是Person 类型的,  你需要把p 转换成Chinese 类型的才可以访问 。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
类不是Parson p=c那样这样传递的 这只是传递的值,所以Parson没有color属性 ,是访问不到的,再说哪有父类继承子类的 这是永远访问不到的  谢谢
回复 使用道具 举报
P是父类的对象C是子类的对象,好好看看里氏转换
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马