[Objective-C] 封装、继承和多态

”等我准备好了再说“, ”等我都准备好了再上班“,“”等我准备好了再结婚 “等我准备好“ 是永远不存在的状态,再怎么等 也没办法”准备好的“;-----蔡康永

面向对象的三大特征:封装、继承、多态

封装

封装:客观世界中对象的成员变量(用于描述对象的状态数据)都被隐藏在对象内部,外界无法直接操作和修改, 入一个对象的年龄,只能随着年月更迭而变化,一般不允许直接修改 对一个类或对象实现良好的封装。()

OC提供了4个访问控制符: @private @package @protected @public 分别代表的4个访问控制级别。 

@private  只允许在当前类中访问

@protected 允许在当前类和子类中访问

@package 当前类和同一个映像中

@public  默认为public 可以在任意地方访问


继承

提到继承,就得提到其根类, 没有父类的类位于类层次的最顶层,称为根类(root)在OC中允许建立自己的根类, 但通常不这么做,而是希望利用现有的类, 目前我们所定义的类都是属于NSObject 根类的派生类。   

继承一般体现在接口部分,     如栗子所示, ClassA继承了NSObject的任何方法和实例变量。

@interface ClassA: NSObject 
{
 int x;
}
-(void)	initVar;
@end

若再建诸如继承于ClassA 的子类ClassB,  则又继承了ClassA.(我们常通过继承来扩展:添加新方法)

如之前一片博文提到的Rectangle类,  现假设你将使用正方形 Square; 则可以通过Square继承Rectangle类做到,   因为正方形是矩形的子类,也是它长宽相等的特例;

我们给出Squere的实现文件。

#import "Square.h"

@implementation Square
-(void) setSide: (int )n
{
    [self setWidth:n andHeight:n];
    
}
-(int )side
{
    return self.width;
}
@end
setSide: 方法利用了一个事实,即你从 Rectangle类继承了一个方法来设置矩形的宽度和高度,因此 setSide:方法会调用Rectangle类的
setWidth:n andHeight:n
方法来传递参数,

我们可以通过覆写来更改继承方法的定义。

假设我们拥有一台打印机, 可以打印不同的颜色。通过覆写print就可以输出不同的颜色;

那么就可以提出多态概念了; 

多态

Oc中的多态:不同对象对同一消息的不同响应.子类可以重写父类的方法

多态就是允许方法重名 参数或返回值可以是父类型传入或返回。

栗子: Fraction和Complex类都包含 print方法, 那么 ,在执行消息表达式:

[myFraction print];和[myComplex print];  时,系统如何知道执行哪个方法呢?

答案是:OC编译器运行时知道消息的接受者是个什么类型的对象,那么 将会调用该类的方法

系统总是携带有关于“一个对象属于哪个类”这样的信息,该信息能使系统在运行时做出这样的决定,而不是在编译时。

 




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值