(OC_03)
1.封装
封装:隐藏内部实现,稳定外部接口
好处:
使用起来更加简单
变量更佳安全
可以隐藏内部实现
开发速度更加快捷
作用:
类来封装了属性和方法
方法封装了实现的代码
属性封装了成员变量
继承:继承是避免冗余,提高代码的可重用性和维护的有效手段
继承的传递性:直接父类 间接父类
继续需要符合的关系:is-a
子类和父类都需要满足 is-a 关系,才存在继承
继承概念下的 is-a 关系是个单向关系
子类具有父类的属性和行为,以及自身特殊的属性和行为
继承的特点:
1.使用继承可以实现代码的复用,减少代码冗余;
2.OC中一个类可以继承另一个类,被继承的类称为父类或超类(基类),继承的类称为子类或派生类(孩子类);
3.子类可以改变父类中已有的方法,执行不同的代码实现;
4.子类可以改变父类中已有的方法,执行不同的代码实现。
5.OC中只允许单一继承,因为多重继承会有称为“致命方块”的问题,如一个父类里面有+burn和-burn,+|-还有个子类xx,调用burn不知道调用+还是-;
Father *father = [[Father alloc]init];
father.name = @"Lee";
[father sayHello];
[father charge];
NotInheritedSon *notInheritedSon = [[NotInheritedSon alloc ]init];
notInheritedSon.name = @"xxxx";
[notInheritedSon sayHello];
[notInheritedSon charge];
//继承Father 可以用Father的方法charge
Son *son = [[Son alloc]init];
son.homeAddress = @"foShan";
[son charge];
[son sayHello];
[son race];
多态
多态就是对于不同对象响应同一个方法时做出的不同反应,它是建立在继承的基础上面。
1.继承与同一父类的字类,它们本身具有自己的特征
2.继承于统一父类的字类,在执行同一命令的时候,具有不同的效果
SonA *sonA = [[SonA alloc]init];
sonA.name = @"sonA";
[sonA sayHello];
SonB *sonB = [[SonB alloc]init];
sonB.name = @"sonB";
[sonB sayHello];
多态的好处
1.可以简化编程接口
允许多个类中定义同一消息接口
可以定义一个通用的调用方法,以简化调用。
2.把不同的子类对象都当作父类来看
可以屏蔽不同子类对象之间的差异,写出通用的代码
做出通用的编程,以适应需求的不断变化。
1.可以简化编程接口
// id animal = NULL; //由于id类型的通用性质,我们可以将创建好任意对象赋值给animal
// animal = [Cat new];
// [animal eat];
//
// animal = [Dog new];
// [animal eat];
//2.把不同的子类对象都当作父类来看
// Animal *animalB = nil;
//
//
// animalB = [Cat new];
// [animalB eat];
//
// animalB = [Dog new];
// [animalB eat];
/*
开闭原则 和 里氏代换原则
开闭原则:对扩展开放,对修改关闭
里氏代换原则:任何基类可以出的地方,子类一定可以出现
*/
Cat *cat = [Cat new];
Dog *dog = [Dog new];
Person *person = [[Person alloc]init];
// [person feedCat:cat];
// [person feedDog:dog];
[person feedaAnimal:dog];
输出当前对象所属的类
//打印哪个类里面的哪个方法
NSLog(@”%s”,FUNCTION);