OC - 3.OC的三大特性
一、封装
1> 封装的定义
- 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别
2> 封装的好处
- 可以通过set方法防止为成员变量设置不合理的值
- 仅向外部提供公开的接口,屏蔽成员变量的操作过程
- 外界可以通过接口间接的操作成员变量,而不必关注内部细节
3> set方法和get方法
set方法
① 作用:为成员变量赋值
② 命名规范
)名字必须以set开头
)set后紧跟成员变量名,且首字母要大写
)返回值一定是void类型
)一定接收一个类型与要赋值的成员变量一致的参数
③ 若成员变量为只读类型,通常不需要set方法
④ set方法可以用于监听成员变量的改变,而触发相应的操作get方法
① 作用:返回成员变量的值
② 命名规范
)方法名与成员变量名一致
)返回值类型与要返回的成员变量一致
)不需要接收任何参数
二、继承
1> 继承的定义
- 一个对象直接使用另一个对象的属性和方法,并扩展自己特有的属性和方法
2> 优缺点
优点
① 基于原有的模型,扩充特有的方法
② 抽取重复代码,降低代码冗余
③ 建立类与类之间的联系缺点
① 耦合性太强
3> 基本使用
- 可以使用继承自父类的成员变量和方法
- 可以根据需求扩充自己特有的方法
- 可以在子类中用同名方法来重写父类的方法
- 调用一个方法时,先在当前类中找该方法,若找不到,再在父类中找
4> 使用注意
- 用户自定义的类通常继承自系统中的根类,如:NSObject
- OC语言的继承是单继承
- 只能继承父类的非私有成员变量和方法
- 继承不能减少父类中的成员变量和方法
- 子类中不允许出现与父类中同名的成员变量
- 父类必须声明在子类的前面
5> 继承与组合
继承
① 当两个类用有相同的属性和方法时,通常将相同的属性和方法抽取到
一个父类,使用继承关系
② 若A类用有B类的部分属性和方法,通常让B类继承自A类组合
① 当一个类包含另一个类的全部属性和方法,通常让这个类作为另一个
类的属性,使用组合关系
② 若A类用有B类的全部属性和方法,通常让B类作为A类的属性
6> self与super
self
① 基本使用
)self是一个指针,指向调用当前方法的对象/类
)可以调用成员变量和方法
)使用self来调用成员变量,可以区分同名的局部变量
② 使用注意
)用self调用当前方法会引发死循环
)不能使用self在类方法中调用对象方法,反之亦然
)不能使用self调用函数super
① 基本使用
)每个类都会有一个super指针指向其父类
)子类重写父类的方法时,若想保留父类的一些行为,通常用super
调用父类中被重写的方法
② 使用注意
)通过super可以直接调用父类中的类方法/对象方法
)所调用方法的类型与当前方法的类型一致,如:若当前方法为类
方法,则调用父类中的类方法,反之亦然
三、多态
1> 动态绑定的概念
- 在程序的执行期间判断所引用对象的实际类型,根据实际的类型调用其相应的方法
2> 基本使用
- 多态通常指多种形态
- 体现为父类指针指向子类对象
- 使用类动态绑定的概念
3> 优缺点
优点
① 当一个函数/方法用父类类型作为参数,可以接收父类、子类对象
② 降低了代码的冗余缺点
① 不能使用父类指针调用子类的方法
② 编译器只会检测语法是否有误,只有在运行时才会根据动态绑定结果
调用相应的方法
4> 使用注意
- 多态必须以继承为基础,没有继承就没有多态
- 在运行时会动态检测指针指向的真正对象
- OC语言是弱语法,可以用用任何类型的指针指向一个已知的对象,只会发出警告
OC - 3.OC的三大特性的更多相关文章
- OC基础 类的三大特性
OC基础 类的三大特性 OC的类和JAVA一样,都有三大特性:继承,封装,多态,那么我们就来看一下OC中类的三大特性. 1.继承 继承的特点: (1)子类从父类继承了属性和方法. (2)子类独有的属 ...
- oc语言--面向对象的三大特性
一.封装 1.什么是封装 在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将对象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的 ...
- OC语言-03-OC语言-三大特性
一.封装 1> 封装的定义 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别 2> 封装的好处 可以通过set方法防止为成员变量设置不合理的值 仅向外部提供公 ...
- 黑马程序员——OC语言 三大特性之多态
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之一的多态 (一)多态的基本概念 OC对象具有多态性体现在 Per ...
- 黑马程序员——OC语言 三大特性之继承
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之继承 (一)继承的基本用法 先建立个Animal再用Dog继承前 ...
- (转载)OC学习篇之---类的三大特性:封装,继承,多态
之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今 ...
- OC面向对象的三大特性
一.面向对象的三大特性:封装(成员变量).继承和多态 1. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员 ...
- OC学习6——面相对象的三大特性
我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这也是面向对象的三大特征.OC学习篇之---类的三大特性(封装,继承,多态) 1.封装(Encapsulation)是指将对象的状态信息 ...
- 转 OC温故:类的三大特性(封装,继承,多态)
原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性 ...
- OC学习篇之---类的三大特性(封装,继承,多态)
之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习 ...
随机推荐
- html总结----------------------看这个就够了
HTML是我们学习Javaweb的第一步 很好地掌握门课是非常有必要的!下面就是我在听资深老师讲课的笔记!个人觉得非常不错!希望可以帮助到那些在学习javaweb路上的 朋友们!从今天 陆续的整理这门 ...
- C++之编码问题(Unicode,ASCII,本地默认)
本篇文章试图回答的问题: 1.char* pStr="我aa";这句代码执行后,pStr指向的内存区域中存储的字节到底是根据什么码表而来的呢?该字符串占几个字节? 2.将一个VS2 ...
- Bzoj 1562: [NOI2009]变换序列 匈牙利算法,二分图匹配
题目: http://cojs.tk/cogs/problem/problem.php?pid=409 409. [NOI2009]变换序列 ★★☆ 输入文件:transform.in 输出文 ...
- Storm系列(四)Topology提交校验过程
功能:提交一个新的Topology,并为Topology创建storm-id(topology-id),校验其结构,设置必要的元数据,最后为Topology分配任务. 实现源码: 1 ); Conf ...
- 伪分布配置完成启动jobtracker和tasktracker没有启动
检查logs目录下的hadoop-root-jobtracker日志文件 2014-02-26 19:56:06,782 FATAL org.apache.hadoop.mapred.JobTrack ...
- HW4.8
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- 部署 外网 ASP.NET程序时, IIS安全性 配置 -摘自网络
最近,和朋友们在聊及ASP.NET程序的安全性没有JAVA高,IIS(Internet Infomartion Server)的存在很多漏洞(以及新型蠕虫,例如Code Red 和Nimda),安全得 ...
- hdu 1754 I Hate It (splay tree伸展树)
hdu 1754 I Hate It 其实我只是来存一下我的splay模板的..请大牛们多多指教 #include<stdio.h> #include<string.h> #i ...
- AS3 IOC框架Spring Actionscript 的使用总结
Spring Actionscript 是众多围绕依赖注入提供解决方案的Flex控制反转框架之一 AS3 下经典的IOC框架有Spring ActionScript.Parsley.Flicc和Swi ...
- 细谈JavaScript中的书写规范
当你有一些感触想写下一些东西的时候,总会发现其实你想写的所有文章都有大牛已经给你写好了,而且写的比你好. https://github.com/ecomfe/spec/blob/master/java ...