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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨勇 中级黑马   /  2014-4-30 15:45  /  1429 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨勇 于 2014-5-7 10:10 编辑

在oc中,如果子类继承了父类,那么子类可以重写父类的方法,请问子类中能否定义和父类相同的成员变量?谢谢

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

10 个回复

倒序浏览
既然是继承,那么子类会拥有父类中所有得成员变量和方法,因此子类不可以定义跟父类中相同得成员变量,会造成重复定义。但是可以拥有跟父类相同的方法。
回复 使用道具 举报
规定子类继承父类,不可以定义和父类相同的成员变量。
另:请问什么情景下,你会这么用?

点评

为什么你们有说可以的,也有说不可以的?  发表于 2014-4-30 21:58
回复 使用道具 举报
不可以,子类继承过来,它就有了,没必要再定义
回复 使用道具 举报
方法重定义不是?
如果子类中有重定义父类的方法,并且使用的是父类的成员变量,那么所输出的就是父类的成员变量。
只有子类中有重定义父类的方法,并且使用的是子类重定义的成员变量,那么输出的是子类的成员变量。
关键还是看你调用的是哪个方法
回复 使用道具 举报
是可以重新定义的,从继承来看,你在子类重新定义相同的变量,那就是重写父类的相同的变量,类似于你重写父类的方法。
也可以从另一个方面来看,就类似于你在一个类里面,定义一个全局变量,你同样可以在你的函数里面定义一个相同名字的变量。
只是在你最终在子类里面用的时候,如果你重写了那个变量,你就是用的你子类里面的变量,类似于你在函数里面,用你定义的变量 不是全局变量一样。
回复 使用道具 举报
不可以,这个问题老师在视频中讲的很清楚了,子类不可以定义和父类相同名称的属性;是会直接报错的,而不是警告; 重写是对方法而言的;
回复 使用道具 举报
1、不允许子类和父类拥有相同名称的成员变量

2、可以允许子类和父类拥有相同名称的方法,如果子类和父类中都有相同名称的方法,当子类对象调用方法时,先查看子类中的方法,就近原则,

3、当子类中拥有父类中相同名称的方法,又称为该方法的重写;即子类重新实现父类中的方法,覆盖父类以前的做法
回复 使用道具 举报
1.重写:子类重新实现父类中的某个方法,覆盖父类以前的做法
2.注意
1> 父类必须声明在子类的前面
2> 子类不能拥有和父类相同的成员变量
3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马