4-封装/继承/多态

2015-07-14  本文已影响100人  SoftKnife
People Lack Willpower,Rather Than Strength!

1.封装

2.self关键字

+ 成员变量:成员变量是一个实例对象的具体状态特征,并且这些状态特征是可以改变的;
+ 对象方法:一个实例对象的行为,有可能会影响自身的某些状态特征.
    > 对象方法可以通过 [[self class] +method]调用类方法
    > 因为,既然有对象,那么肯定存在类,反之不然.
+ 类方法:类方法是某个类的行为,可以直接通过类名调用;如果在类方法中需要使用某些数据,必须通过参数传入;
    > 它不能绕过对象直接访问成员变量。
    > 因为有类并不一定有对象! 

+ 类方法中的self
    - self 就是类对象(类对象的指针).
    - 通过类名调用类方法,其实就是给类对象发消息.
    - 整个程序运行过程中,一个类只能有一个类对象.
+ 对象方法中的self:
    - 在整个程序运行过程中,一个类可以有0个或多个对象.
self super
隐私参数 编译器指示符
它和super指向的是相同的消息接收者 只是告诉编译器在执行的时候,去调谁的方法
``` 
*self*: refers to the object receiving a message in objective-C programming.
*super*: is a flag that tells the compiler to search for the method implementation in a very different place. e. It begins in the superclass of the class that defines the method where super appears.It begins in the superclass of the class that defines the method where super appears.

``` 

3.继承:

4.多态


    -> 为什么一定要重写?
    : 如果没有重写,看下面的情况:
    
    Person *p = [Student new];
    [p study]
    
    > 注意:这里Student有study方法.
    > 如果我们想用p调用study,如果study方法是Student独有的方法,compile time父类指针无法响应子类方法的SEL值(NO ==[p repondsToSelector:@(method)])

5.实例变量修饰符:

1.修饰符的意义

@public @protected @private @package
(公开的) (受保护的) (私有的) (框架级别的)
在有对象的前􏰀下,任何地方都可以直接访问。 只能在当前类和子类的对象方法中访问 只能在当前类的对象方法中才能直接访问 作用域介于私有和公开之间,只要处于同一个框架中相当于@public,在框架外部相当于@private

2.变量修饰符在子类中的访问:

6.description陷阱

(NSString *)description {
   return [NSString stringWithFormat:@"%@", self];
}
上一篇下一篇

猜你喜欢

热点阅读