美文网首页
继承、分类与拓展

继承、分类与拓展

作者: 滚滚猫 | 来源:发表于2019-08-16 11:03 被阅读0次

一、继承

继承是指一个新类拥有被继承类(父类)的全部属性和方法。
特点:
1、代码重用,子类可以重写父类的方法,并用super来调用父类的方法
2、类方法可以和对象方法重名(+表示类方法,-表示对象方法)
3、子类中不能定义与父类中同名的成员变量。
4、OC是单继承,一个类只能继承一个直接父类。OC是多层继承,B类继承A类,C类继承B类…
5、父类的改变影响所有的子类,所以子类和父类的耦合度很高。

二、分类(类别):UIButon(Add)

拓展已有类的功能。(Category)
特点
1、为原有的类增加类方法
2、原则上讲,分类是不能增加成员变量的,因为分类的结构体指针中,没有属性列表,只有方法列表。但是可以通过runtime解决无setter/getter的问题。
3、如果在分类中用@property增加成员变量,只能生产getter和setter方法的声明,需要实现get、set方法才能被调用
4、可以访问原有类@protect和@public形的成员变量
5、分类可以扩充系统自带的类的功能。如UIButton之类的
6、不能在分类中定义与原有类同名方法,如果定义了,那么分类中的方法会覆盖原有类的方法(即使不引用)。
7、不同的分类之间也不可以有同名的方法,如果定义了,执行最后编译的方法。
8、需要使用#import引用分类。

三、类扩展:UIButon()

在.m文件中为类增加私有的成员变量和方法。(extension)
特点
1、类扩展不仅可以增加方法,还可以增加实例变量(或者属性)。增加的属性和方法,都是私有的。
2、类拓展只有.h方法,没有.m方法。不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。
3、类扩展中声明的方法没被实现,编译器会报警,但是类别中的方法没被实现编译器是不会有任何警告的。这是因为类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中。


栗子:分类不能增加成员变量,但是使用runtime可以实现

@interface UIButton (Add)
@property(nonatomic,copy) NSString *name;
@end

#import "UIButton+Add.h"
#import <objc/runtime.h>
@implementation UIButton (Add)
static NSString *nameKey = @"nameKey";
- (void)setName:(NSString *)name
{
     objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_COPY);
}
- (NSString *)name
{
    return objc_getAssociatedObject(self, &nameKey);
}
@end

相关文章

  • 继承、分类与拓展

    一、继承 继承是指一个新类拥有被继承类(父类)的全部属性和方法。特点:1、代码重用,子类可以重写父类的方法,并用s...

  • 多态、继承、拓展、分类

    多态 一、概念 多态:不同的对象以自己的方式响应消息的能力叫做多态。 在ios开发中,每个类都有自己对应的名字空间...

  • 分类与拓展

    分类(Category) Category是Objective-C 2.0之后添加的语言特性,分类、类别其实都是指...

  • iOS中分类和继承的区别

    在OC中,扩展一个类的方式有两种:继承与分类。 继承与分类最大的区别是,一般情况下,分类不能扩展属...

  • (十)分类与继承

    前言 无言 一、继承 继承这个只要写ios应该都会遇到,毕竟自己创建的类都是继承自系统自带的类的。继承与分类的区别...

  • 分类(category)和类扩展(extension)

    分类(category在iOS开发中使用非常频繁。尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系...

  • iOS 类拓展的加载

    什么是类拓展呢? 类拓展就是一个匿名的分类。 类拓展 分类 类拓展的作用 给当前的类增加属性和方法。 类拓展何时加...

  • 类与继承(完全继承/完全继承后的拓展)

    第9篇分享 面向对象编程 一、类(代码示例) 类:用来描述具有相同的属性和方法的对象的集合 self代表类的实例,...

  • 分类、类扩展与继承

    在OC中,扩展一个类的方式有两种,继承和分类。 分类(Category) 概念 分类(Category),是OC中...

  • Django笔记11-分类页面与模板继承

    分类页面与模板继承 显示单一类别的文章列表 分类页面  分类页面与首页基本相同,但是显示的是指定类别的文章 模板 ...

网友评论

      本文标题:继承、分类与拓展

      本文链接:https://www.haomeiwen.com/subject/xshfsctx.html