---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、封装
1、概念
把对象的属性和行为封装成一个独立的单位,并尽可能隐蔽其内部细节
2、作用
1> 更加接近人类的思考方式
2> 只需要关注对象,不需要关注步骤
3> 提高类和系统的安全性
3、使用方法
类、setter、getter都是封装的体现
二、继承
1、概念
继承是一种由已有类创建新类的机制,利用继承,可以先创建一个共有属性的一般类,根据这个一般类再创建具有特殊属性的新类。
被继承的类称为父类或超类(superclass),继承类成为子类(subclass)
2、作用
在不改变原来模型的基础上,拓充方法,同时建立了类与类之间的联系,抽取了公共代码。
坏处:耦合性强(依赖性强)
3、使用方法
@interface Animal : NSObject // Animal的声明
{
int weight;
}
- (void)eat;
@end
@implementation Animal // Animal的定义
- (void)eat
{
NSLog(@"吃-体重:%d", weight);
}
@end
@interface Bird : Animal // Bird的声明
{
int height;
}
- (void)fly;
@end
@implementation Bird// Bird的定义
- (void)fly
{
NSLog(@"飞-高度:%d", height);
}
@end
@interface Dog : Animal // Dog的声明
{
int speed;
}
- (void)run;
@end
@implementation Dog // Dog的定义
- (void)run {
NSLog(@"跑-速度:%d", speed);
}
@end
①狗和鸟抽取出一个动物父类,他们继承了父类的体重属性和吃方法
②狗拥有自己的属性速度和跑方法,鸟拥有自己的高度属性和飞方法
设计时,另一个类的所有属性都是你需要的,就继承它,如果只是部分属性跟你一致,就提取出一个父类。
特殊情况:一个学生类有数学、英语、语文成绩,一个成绩类也有数学、英语、语文成绩。
这时继承在逻辑上不合理,可以采用组合的方式,即在学生类里声明一个成绩类的成员变量。
4、注意点
①子类拥有父类的所有成员变量及方法,所以不能定义同名的成员变量,但可以重写父类的方法。
②在调用子类的成员变量或方法时,会去先访问子类,如果没有,则去父类中找。(NSObject是所有类的父类,alloc和init方法就是继承它的)
③OC是单继承,即只能有一个父类。
④当子类和父类有同名的方法时,会访问子类方法,如果想访问父类方法需使用super关键字
(在对象方法中只能调用父类的对象方法,类方法只能调用类方法,不能混用)
三、多态
1、概念
多态性是指允许不同类的对象对同一消息作出响应(父类指针指向子类对象)
2、作用
如果函数或方法参数中使用的是父类类型,可以传入父类和子类对象,节省代码量、易扩展。
3、使用方法
例:喂食这个方法定义的是animal类,那它的子类bird、dog对象都可以当做参数传入。
void feed(Animal *a)
{
[a eat];
}
int main()
{
Dog *d = [[Dog alloc] init];
feed(d);
Animal *a = [[Dog alloc] init]; //将子类对象给了父类类型的指针
[a eat]; // 这时会调用子类中的eat方法
}
4、注意点
1>没有继承就没有多态
2>调用方法时会动态检测对象的真实类型
3>父类类型变量不能直接调用子类对象的特有方法,必须强制转换为子类类型变量后才可调用
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com