如何对一个类进行扩展?

如何对一个类进行扩展?

在对类的处理中,我们会应用到的主要由四种方式,

一、    继承(inherit

面向对象程序有三大特性,封装、继承、多态。

   封装就是对一个类或者我们需要的一系列行为进行整理,只是给出外界一定的interface,通过这些Interface我们就可以对这一系列行为进行管理。使用的时候给对象发送消息就可以了。

   继承是针对两个有相互关系的类而言的,子类拥有父类所有的实例变量和行为方法,子类可以调用父类中所有方法。注意区别继承与包含。

多态指的是?

   这里我们可以看出,子类继承父类中所有行为。换个角度来说,我们已经有了一个类,如果需要扩展这个类,那么其中的一种方法就是给他找一个父类继承之。这样一下子就可以逆袭了。

继承的方法不再赘述。

多态

 

二、    分类或者类目(category

什么是category?

Category就是对一个已知的类拓展一个分类(含有.h和.m),在新建分类class的时候,注意选择主类,也就是需要给哪个类进行拓展。

    如何使用?

   (1)选择创建分类

        

   (2)在分类中创建方法声明和方法实现。

        注意在实现的时候使用self关键字。

   (3)导入分类头文件#import "NSString+StringAdd.h"

   (4)用分类中方法给对象(或者类)发送消息。注意这里如果是+方法的时候,我们的类名指的是主类名称,并不是分类名称。

  

   使用Category给我们带来哪些便利?

   Category可以对类进行拓展,丰富了原来的类,使得原来的类增加了现在类的方法。

   注意:分类无法增加实例变量,只能给主类增加方法声明和实现。如果要对类进行实例变量的增加,那么请使用继承。继承常见于开源代码中,因为开源代码我们能够对父类的特性了解得十分清楚。对于闭源代码中,我们对父类的代码并不了解,因此我们使用分类来进行扩展。

 

三、    协议(protocol

协议一般情况下与代理(delegate)联合使用

什么是协议?

Protocol是一份接口协议,这份协议里面仅仅只有方法声明,这些声明中规定了@required与@optional,也就是规定了协议中的必修课与选修课。

协议的使用?

当需要遵循协议的时候,我们需要使得该类遵循协议,也就是在父类后加上<协议名>

@interface Person : NSObject<NSCopying>

举例来说:男女结婚案例

男方要遵循相关协议,才能够迎娶女方。在遵循协议的时候,男方就是一个代理过程,代理了这个协议的内容,然后具体对协议的执行实现是由男方决定。

协议的用处?

简化代码,控制类。

通常与代理(delegate)联合使用

凡是某些任务自己不去实现,想让别人去帮你实现的,name你就可以写一份协议,将该协议交给代理人,让代理去实现。你只需要通知代理去做某件事。

 

四、    延展(extension

extension可以认为是匿名的category,但是这个extension相对于category有一个特殊功能:在extension中可以定义可写的属性,公有可读、私有可写的属性(Publicly-Readable, Privately-WriteableProperties)一般这样实现!

例如:

@interface Person ()//在延展(extension)中,定义的私有方法只能在.m文件中进行实例变量定义与方法声明,当我们需要添加私有的实例变量时候,括号中为空。在这里声明的方法在下面实现文件中实现。这里方法与变量只能在.m文件中使用。

{

    NSString *_sex;

}

- (void)sayHi;

@end

@implementation Person

-  (void)sayHi

-  {

-  }
@end

 

五、    总结

    在对类的处理中,protocol力量比较薄弱,仅仅能够提供接口,具体的实现还得看代理者的实现方法。而extension是对变量可见度进行控制。Category不提供接口,也提供实现方法,相对较为强大。这些关键字中,最强大的莫过于继承inherit,因为inherit不仅继承了类,还扩大了自己的类,不仅可以扩展方法,而且可以扩展实例变量。

   

开放封闭原则主要体现在两个方面:

    对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

   对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值