@protected: 受保护的,这个实例变量只能在该类和这个类的子类中被访问,(可以被子类继承)其他类无法访问。不写的情况下默认为这个属性。
@private:私有的,这个实例变量只能再该类的中访问,其他类不能访问,包括它的子类继承同样无法访问
@public:公有的,这实例变量谁都能访问。
841337-11d38ff6bfaeabc8.png
在花括号里面默认不写就是@private
屏幕快照 2016-03-15 12.45.13.png但是在正规的OC语法,你不能对一个类的方法定义为private
屏幕快照 2016-03-15 12.48.58.png在.m文件中 用分类实现私有方法
总结:
目前没看见protected的方法在oc中是怎样实现的
因为有runtime 这个东西
你想调用总是能调用到的
oc最终会变成纯c,这就是没有真正private的原因。
由于Objective-C的动态消息传递机制,OC中不存在真正意义上的私有方法。但是如果你不在.h文件中声明,只在.m文件中实现,或在.m文件的Class Extension里声明,那么基本上和私有方法差不多。
将property定义到.m的Class Extension也基本上和私有变量差不多,同时也是私有方法
继承
父类中私有的成员变量,在子类中已经存在了,只是没有权限访问
在子类中不可以定义与父类同名变量,哪怕这个变量在父类中是私有
子类用super调用父类私有方法问题?
super只是指定要调用的对象是父类,至于能不能调用还是看父类方法的修饰符。私有方法(private)只能当前类才能调用,子类无法访问。
网友评论