封装
封装性就是隐藏实现细节,将属性私有化,提供公有方法访问私有属性。
封装属性语法
向外部提供设置属性的set方法
- (void)setName: (NSString *)name;
向外部提供访问属性的get方法
- (NSString *)name;
关联关系
关联关系是类与类之间的关系
一个类中包含另一个类的对象就是关联关系
关联关系是开发中最为常用的对象与对象间的关系
关联关系示例1
女孩打电话给土豪
找出这一示例中必须存在的对象
关联关系示例2
女孩开车
女孩玩ipad
分析出下面两个场景中的对象
关联关系适用场景
当一个对象与另一个对象是拥有关系的时候
女孩拥有电话
学生拥有成绩
土豪拥有宝马汽车
依赖关系与关联关系的区别
关联关系是对象与对象之间的比较高的依赖性
与对象作为参数相对来说,对象与对象之间的依赖性就较之组合的依赖性更低
Self关键字
能够访问类自身的成员变量
能够调用类自身的方法
谁调用self,self就指向谁
Self关键字一定是类的方法中使用
继承性
OC中的类都继承自NSObject
继承性是类与类之间的关系—对象与对象之间的关系
OC中只有单继承
继承语法
@interface Iphone1 : NSObject
{
NSString * _OSVersions; //系统版本号
int _cpu; //cup
int _ram; //内存
}
//后置摄像头
(void)backCamera;
//拨打电话
(void)sendSignal:(NSString *)number;
//发送信息
- (void)sendMessage:(NSString *)message;
@end
通过继承扩展功能
typedef enum
{
kFlashlightStatusClose,
kFlashlightStatusOpen,
kFlashlightStatusAuto
}FlashlightStatus;
@interface Iphone2 : Iphone1
{
FlashlightStatus _flashlightStatus; //闪光灯状态
}
//闪光灯
- (void)flashlight:(FlashlightStatus)status;
//前置摄像头
- (void)frontCamera;
@end
重写父类方法
@implementation Iphone2
- (void)backCamera
{
if (_flashlightStatus == kFlashlightStatusOpen)
{
}
else if (_flashlightStatus == kFlashlightStatusClose)
{
}
NSLog(@"拍摄照片");
}
@end
Self关键字
@implementation Iphone2
- (void)backCamera
{
if (_flashlightStatus == kFlashlightStatusOpen)
{
[self openFlashlight];
}
else if (_flashlightStatus == kFlashlightStatusClose)
{
[self closeFlashlight];
}
NSLog(@"拍摄照片");
}
@end
Super关键字
@implementation Iphone2
- (void)backCamera
{
if (_flashlightStatus == kFlashlightStatusOpen)
{
[self openFlashlight];
}
else if (_flashlightStatus == kFlashlightStatusClose)
{
[self closeFlashlight];
}
[super backCamera];
}
@end
多态性
使用父类的指针变量保存子类对象
使用该指针调用父类中声明的方法和变量
如果子类中重写了父类中的方法,那么在调用这个方法的时候,将会调用子类中的这个方法
多态依赖于继承关系而存在
动态确定数据类型
多态语法
父类指针变量保存了子类对象
Iphone1 * ip1 = [Iphone2 new];
方法参数的多态性
@implementation Person
- (void)feedAnimal:(Animal *)animal
{
[animal eat];
}
@end
使用Animal *作为方法的参数,那么我们可以传入Dog,Cat,Tiger之中的任何一个对象
传入的是哪个对象,
就会调用哪个对象的eat方法