OC的属性&继承&多态

@protected: 受保护的,这个实例变量只能在该类和这个类的子类中被访问,(可以被子类继承)其他类无法访问。不写的情况下默认为这个属性。
@private:私有的,这个实例变量只能再该类的中访问,其他类不能访问,包括它的子类继承同样无法访问
@public:公有的,这实例变量谁都能访问。

841337-11d38ff6bfaeabc8.png

在花括号里面默认不写就是@private

但是在正规的OC语法,你不能对一个类的方法定义为private

屏幕快照 2016-03-15 12.45.13.png

在.m文件中 用分类实现私有方法

屏幕快照 2016-03-15 12.48.58.png

总结:
目前没看见protected的方法在oc中是怎样实现的

因为有runtime 这个东西
你想调用总是能调用到的
oc最终会变成纯c,这就是没有真正private的原因。

由于Objective-C的动态消息传递机制,OC中不存在真正意义上的私有方法。但是如果你不在.h文件中声明,只在.m文件中实现,或在.m文件的Class Extension里声明,那么基本上和私有方法差不多。

将property定义到.m的Class Extension也基本上和私有变量差不多,同时也是私有方法

继承

父类中私有的成员变量,在子类中已经存在了,只是没有权限访问
在子类中不可以定义与父类同名变量,哪怕这个变量在父类中是私有

子类用super调用父类私有方法问题?
super只是指定要调用的对象是父类,至于能不能调用还是看父类方法的修饰符。私有方法(private)只能当前类才能调用,子类无法访问。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容