OC中类的特性共有有三个,它们分别是封装、继承和多态。

封装:封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能。

OC中有四种访问权限修饰符:@public、@protected、@private、@package

要注意的是:OC中的方法是没有修饰符的概念的,这个和Java有很大的区别,一般都是公开访问的,即public的,但是我们怎么做到让OC中的一个方法不能被外界访问呢?

OC中是这么做的,如果想让一个方法不被外界访问的话,只需要在.m文件中实现这个方法,不要在头文件中进行定义,说白了就是:该方法有实现,没定义,这样外界在导入头文件的时候,是没有这个方法的,但是这个方法我们可以在自己的.m文件中进行使用。(和IOS中的单例模式有关)

继承:继承是类中的一个重要的特性,他的出现使得我们没必要别写重复的代码,可重用性很高。

1、成员变量的作用域。成员变量的作用域应该也是封装的一种,它对成员变量的作用范围做出了一些限制。

@public : 在任何地方都可以直接访问成员变量。

@protected:在本类和子类中可以直接访问。

@private:只能在本类中访问。

@package:在同一个框架内可以访问。

默认情况下在类的声明中定义的成员变量的修饰符是@protected,在类的实现中定义的成员变量的修饰符是@private。

总结:(1)封装是为了保护类中的属性,不让外界直接对属性进行访问和赋值。但是我们可以利用set和get来对属性进行赋值和取值。

(2)set方法里可以写上对属性的判断,以免我们输入一些不合理的值给属性。

(3)成员变量的作用域的修饰符有四种,默认情况下在类的声明中定义的成员变量的修饰符是@protected,在类的实现中定义的成员变量的修饰符是@private。

2、继承有什么好处和坏处?

好处:1)我们可以明确的表示两个类之间的关系。2)子类可以继承父类的属性和方法,提高了代码的复用率。

坏处:会增加程序的耦合性。也就是说当有一天我们如果删除了父类,那么子类也将不能再使用,这就是继承的缺点。

3、继承的注意点:

1)父类必须声明在子类的前面。

2)子类的不能重写成员变量,因为子类中不允许有跟父类同名的成员变量。

3)继承不是两个类有相同的属性和方法就可以确定继承关系的。比如说狗中有名字和年龄属性,还有跑和吃饭的方法,这些属性和方法人也可以拥有,但是可以让人继承狗这个类嘛,所以继承还要考虑事物之间的关系。

4、多态的特点:

1)没有继承就没有多态。

2)父类类型的变量不能直接调用子类的方法,必须要强制转化为子类类型才可以。

3)如果函数和方法形参列表中是父类的类型,则可以传入父类或子类的对象。

上面就是继承和多态的介绍。

总结:

(1)继承是指一个类完全地拥有另一个类的属性和方法。

(2)继承时子类可以重写父类的方法,如果要调用父类的方法,可以用super。

(3)继承不可以乱用,我们要理解两个类之间的关系,不是一个类有了另一类的属性和方法就可以继承的。

(4)继承只允许单继承,不能够同时继承多个类。

(5)多态是在继承的基础上实现的。

(6)多态可以在运行时根据对象的类型动态调用方法。

(7)多态不可以直接调用子类的属性和方法。

内存管理总结:

1、OC中是需要进行内存管理的,内存管理的范围是任何OC对象。

2、有alloc就一定要有release,有retain就一定要有release。

3、引用计数器占用四个字节,它是用来表示对象被引用的次数的,如果为0系统就会自动释放内存。

4、对象引用另一个对象的时候,要在set方法里面写该对象的retain,在dealloc中写上该对象的release。

5、@property的参数有很多,对于基本数据类型的变量我们写上 nonatomic和assign,对于OC对象我们写上nonatomic和assign。其中nonatomic是高性能的意思,它用在多线程管理 上,assign是直接赋值的意思,retain是release旧值,retain新值的意思。

构造方法的几个重点:

1、如果需要在初始化的时候就给成员变量赋值,我们就要重写init方法,也就是构造方法。

2、重写构造方法的时候一定要调用父类的构造方法。

3、设计构造方法的时候记得父类的属性交给父类处理。

4、构造方法必须是对象方法。

SEL其实是对方法的一种包装,它是将方法包装成一个SEL类型的数据,根据这个数据我们可以找到对应的方法地址。SEL也就是消息。下面我们根据SEL来调用对象的方法。

// Person类的实现

@implementation Person

- (void)eat

{

NSLog(@"%@在吃饭", _name);

}

@end

int main()

{

Person *p = [[Person alloc] init];

p.name = @"张三";

[p performSelector:@selector(eat)]; // 把方法名包装成一个SEL类型的数据并进行调用

return 0;

}

description是什么呢?它有两种,一种是类方法,一种是对象方法。

1、使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出。返回值是:<类名: 对象地址>。

2、使用NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出。返回值是:类名。

我们可以重写description方法来让对象名和类对象名输出我们想要的结果。比如说:

// Person类的实现

@implementation Person

- (void)eat

{

NSLog(@"%@在吃饭", _name);

}

// 重写description方法返回我们需要的东西

- (NSString *)description

{

return [NSString stringWithFormat:@"_name = %@", _name];

}

@end

int main()

{

Person *p = [[Person alloc] init];

p.name = @"张三";

NSLog(@"%@", p); // 输出结果是:_name = 张三

return 0;

}

转载于:https://www.cnblogs.com/songlei0601/p/5751193.html

Objective--C三大特性:封装,继承,多态(零碎笔记)相关推荐

  1. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  2. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  3. Java面向对象三大特性(封装继承多态)解释及案例

    文章目录 包 包基本语法 命名规则 命名规范 导入包实例 访问修饰符 面向对象编程-封装 面向对象编程-继承 super关键词 super和this的比较 方法重写/覆盖 (override) 注意事 ...

  4. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  5. 三大特征 封装 继承 多态

    ''' 1.面向对象与面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点:扩展性 ...

  6. Python全栈开发——面向对象的三大特性(继承 多态 封装)

    1.继承 1.两层意思 改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o:def ...

  7. Java面向对象三大特性之继承多态的预习笔记,are you ready? 面对疾风吧!

    文章目录 继承(extends) super关键字 方法重写 instanceof关键字 abstract关键字 接口(interface) 多态 继承(extends) AextendsB A继承了 ...

  8. Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]

    ✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...

  9. OC面向对象的三大特征(封装 继承 多态)习题2 复合

    复合:一个类中有一个成员变量是另外一个类的对象. 比如我现在要制作一台电脑,电脑需要CPU,显示器,鼠标和键盘等.这些东西的研发都是很复杂的过程.如果现在有成型的CPU等组件,就可以直接用这些组件攒一 ...

  10. c语言编程 菲薄拉,C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

最新文章

  1. python的优缺点-Python 有什么一般人不知道的缺点?
  2. PKUWC 2018游记
  3. web.config中的session配置详解
  4. 自由自在讲述小资与冰淇淋的美丽生活
  5. 阿里云日志服务(ELK)
  6. MFC中char*,string和CString之间的转换
  7. android通过用户名密码访问服务器获取信息_MySQL ------ 管理用户对数据库的访问控制(GRANT 与 REVOKE)(二十九)...
  8. 《neuralnetworks and deeplearning》学习笔记1-深入理解BP算法
  9. 敏捷软件开发12条原则(译)
  10. centos下yum安装wget失败
  11. linux/mac下一键删除下载失败的maven jar包
  12. 注记字体样式选择指导
  13. 龙门飞甲的一点小小感想
  14. Bulma CSS框架教程
  15. 矩形类定义【C++】
  16. c++类模板用法讲解
  17. javasript | 鼠标经过表格行变色
  18. 计算机链接局域网,window7连接局域网的方法
  19. 沙加在沙罗双树下临死前的一段对白
  20. DSPE-PEG11-Mal含有马来酰亚胺基团的PEG试剂

热门文章

  1. 仿微信公众号后台管理-自定义菜单
  2. [转载]spring security 的 logout 功能
  3. 6个免费的C++图形和游戏库
  4. .NET平台PE结构分析之Metadata(一)
  5. IAR FOR ARM 各版本,需要的大家可以收藏了
  6. 2.4.5 MySQL InnoDB重做与回滚介绍
  7. matpython_[mcj]使用Matlab/Python合并mat文件并存为mat
  8. 用不同的姿势求逆序对(复习篇)
  9. ZCMU 1958: 机器翻译(技巧性的模拟)
  10. 游戏打包过程枯燥且繁琐,如何提升打包效率?