标签:
面向对象的三大特征
— 封装 (Encapsulation)
— 继承 (Inheritance)
— 多态 (Polymorphism)
一,封装
1.信息隐藏,隐藏对象的实现细节,不让用户看到。
2.将东西包装在一起,然后以新的完整形式呈现出来。
3.对象同时具有属性和方法两项特性,对象的属性和方法通常被封装在一起,共同体现事物的特性,,二者相辅相承,不能分割 。
4.OC中也有四种访问权限修饰符:@public、@protected、@private、@package。
private:私有成员,不能被外部函数访问(使用),也不能被子类继承;
protected:保护成员,不能被外部函数访问,可以被子类继承;
public:公有成员,可以被外部函数访问,也可以被子类继承。
OC中,所有的方法(消息),都是公有的
二,继承
1.定义一个通用的类,它有基本的实例变量。子类可以 继承了该类,就可以拥有这些实例变量。子类也可以 定义自己的实例变量。
2.被继承的类叫超类或父类(superclass ),继承超类 的类叫子类或派生类(subclass )。
3.OC中继承的语法规则为: @interface 子类 :父类 。
4. OC语言是单继承语言。在OC语言中,基本上所有类的根类都是NSObject类。
举例:请编码实现动物世界的继承关系
· 动物(Animal)具有行为:吃(eat)、睡觉(sleep)
· 动物包括:兔子(Rabbit),老虎(Tiger)
· 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的
//定义一个Animal类
#import <Foundation/Foundation.h> @interface Animal : NSObject //定义两个方法 - (void)eat;//吃 - (void)sleep;//睡觉 @end #import "Animal.h" @implementation Animal //两个方法实现 - (void)eat{ NSLog(@"进食"); } - (void)sleep{ NSLog(@"睡觉"); } @end
//定义一个Rabbit
@interface Rabbit : Animal @end import "Rabbit.h" @implementation Rabbit //定义一个兔子子类,继承于动物这个父类(两个方法) //重写eat这个方法 - (void)eat{ NSLog(@"兔子吃草"); } @end
//定义一个Tiger
@interface Tiger : Animal @end #import "Tiger.h" @implementation Tiger //定义一个老虎子类,继承于动物这个父类(两个方法) //重写这个方法 - (void)eat{ NSLog(@"老虎吃肉"); } @end
//main
#import <Foundation/Foundation.h> #import "Animal.h" #import "Rabbit.h" #import "Tiger.h" int main(int argc, const char * argv[]) { @autoreleasepool { //兔子这个对象的初始化 Rabbit *rabbit = [[Rabbit alloc]init]; //调用自己重写的方法 [rabbit eat]; //调用父类的方法 [rabbit sleep]; Tiger *tiger = [[Tiger alloc]init]; //调用自己重写的方法 [tiger eat]; //调用父类的方法 [tiger sleep]; } return 0; }
三.多态
1.多态是指同一种类型,具有多种表现形态。
2.多态的条件
必须存在继承关系。
父类声明的变量指向子类对象。
子类重写父类的方法。
例:乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin)。各种乐器的弹奏( play )方法各不相同。演奏家可以使用各种乐器。
//Actor.h
//使用乐器演奏的方法 - (void)playWithInstrument:(Instrument *)instrument;
//Actor.m
//使用乐器演奏的方法 - (void)playWithInstrument:(Instrument *)instrument { [instrument play]; }
//Instrument.h
@interface Instrument : NSObject //演奏 - (void)play;
//Instrument.m
//演奏 - (void)play { NSLog(@"乐器演奏"); }
//Piano.m
//演奏 - (void)play { NSLog(@"钢琴演奏"); }
//Violin.m
//演奏 - (void)play { NSLog(@"小提琴演奏"); }
//main
#import <Foundation/Foundation.h> #import "Piano.h" #import "Actor.h" #import "Violin.h" #import "Instrument.h" int main(int argc, const char * argv[]) { @autoreleasepool { Actor *actor1 = [[Violin alloc]init]; [actor1 play]; Actor *actor2 = [[Piano alloc]init]; [actor2 play]; } return 0; }
标签:
原文地址:http://www.cnblogs.com/ios-0728te254096fh/p/5719339.html