self和super
1、self关键字
在动态方法中,self代表着对象
在静态方法中,self代表类
[self 方法名]:调用其他方法
self可以简单理解为指自己
2、Super关键字
在子类中重写方法时,可以让调用者跳过这一层而调用父类中的方法。
作用:
(1)直接调用父类中的某一个方法
(2)Super处在对象方法中,那么就会调用父类的对象方法;super处于类方法中,那么就会调用父类的类方法。
使用场景:子类在重写父类方法时,想要保留父类的一些行为。
OC面向对象—继承
1、继承
在这里动物是猫类和狗类的父类,黑猫和白猫类是猫类的子类。也就是说猫类和狗类继承动物,黑猫、白猫继承猫类。
2、基类和派生类之间的关系
注意:
1)基类的私有属性能被继承,不能被使用。
2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类
3、继承的注意事项
1)子类不能定义和父类同名的变量,但是可以继
2)OC类支持单一继承,不支持多继承
3)OC类支持多层继承
4、继承体系中方法调用的顺序
1)在自己类中找
2)如果没有,去父类中找
3)如果父类中没有,就去父类的父类中
4)如果父类的父类也没有,就还往上找,直到找到基类(NSObject)
5)如果NSObject也没有就报错了
5、实例变量作用域
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问
注意:
(1)在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是 protected的。
(2)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它 都拥有,只是有的它不能直接访问。
description方法及重写
1、description方法概述
descriptong方法默认返回对象的信息(默认实现是返回类名和对象的内存地址) NSLog(@”%@”, objectA);这会自动调用objectA的descriptong方法来输出ObjectA的descriptong方法来输出ObjectA的信息。
description方法是基类NSObject 所带的方法,因为其默认实现是返回类名和对象的内存地址, 这样的话,使用NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关 心的是对象内部的一些成变量的值。因此,会经常重写description方法,覆盖description方法 的默认实现
2、description重写的方法
//对象的description方法
-(NSString *)description{
return [NSString stringWithFormat:@”狗腿的个数:%d,狗的眼睛个数:%d”,_tuiNum, _eyeNum];
}

//类的description方法
+(NSString *)description{ return @”+开头的方法”;
}
多态
多态指的是: 同一种行为,对于不同的事物具有不同的表现形式。 这就叫做多态。
多态的条件:
有继承关系、有方法重写
父类的声明变量指向子类对象。
//代码体现:用父类类型的指针指向了子类对象,这就是多态
狗 *g = [狗 new];
动物 *a = [狗 new];
多态的优点
多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用 为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现 接口的类的区分开来。
代码实现:
Animal *animal = nil;
//实例化猫的对象
animal = [Cat new];
[animal eat];
//实例化狗的对象
animal = [Dog new];
[animal eat];