OC语言-03-OC语言-三大特性
一、封装
1> 封装的定义
- 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别
2> 封装的好处
- 可以通过set方法防止为成员变量设置不合理的值
- 仅向外部提供公开的接口,屏蔽成员变量的操作过程
- 外界可以通过接口间接的操作成员变量,而不必关注内部细节
3> set方法和get方法
set方法
① 作用:为成员变量赋值
② 命名规范
1)名字必须以set开头
2)set后紧跟成员变量名,且首字母要大写
3)返回值一定是void类型
4)一定接收一个类型与要赋值的成员变量一致的参数
③ 若成员变量为只读类型,通常不需要set方法
④ set方法可以用于监听成员变量的改变,而触发相应的操作
get方法
① 作用:返回成员变量的值
② 命名规范
1)方法名与成员变量名一致
2)返回值类型与要返回的成员变量一致
3)不需要接收任何参数
二、继承
1> 继承的定义
- 一个对象直接使用另一个对象的属性和方法,并扩展自己特有的属性和方法
2> 优缺点
优点
① 基于原有的模型,扩充特有的方法
② 抽取重复代码,降低代码冗余
③ 建立类与类之间的联系
缺点
① 耦合性太强
3> 基本使用
- 可以使用继承自父类的成员变量和方法
- 可以根据需求扩充自己特有的方法
- 可以在子类中用同名方法来重写父类的方法
- 调用一个方法时,先在当前类中找该方法,若找不到,再在父类中找
4> 使用注意
- 用户自定义的类通常继承自系统中的根类,如:NSObject
- OC语言的继承是单继承
- 只能继承父类的非私有成员变量和方法
- 继承不能减少父类中的成员变量和方法
- 子类中不允许出现与父类中同名的成员变量
- 父类必须声明在子类的前面
5> 继承与组合
继承
① 当两个类用有相同的属性和方法时,通常将相同的属性和方法抽取到
一个父类,使用继承关系
② 若A类用有B类的部分属性和方法,通常让B类继承自A类
组合
① 当一个类包含另一个类的全部属性和方法,通常让这个类作为另一个
类的属性,使用组合关系
② 若A类用有B类的全部属性和方法,通常让B类作为A类的属性
6> self与super
self
① 基本使用
1)self是一个指针,指向调用当前方法的对象/类
2)可以调用成员变量和方法
3)使用self来调用成员变量,可以区分同名的局部变量
② 使用注意
1)用self调用当前方法会引发死循环
2)不能使用self在类方法中调用对象方法,反之亦然
3)不能使用self调用函数
super
① 基本使用
1)每个类都会有一个super指针指向其父类
2)子类重写父类的方法时,若想保留父类的一些行为,通常用super
调用父类中被重写的方法
② 使用注意
1)通过super可以直接调用父类中的类方法/对象方法
2)所调用方法的类型与当前方法的类型一致,如:若当前方法为类
方法,则调用父类中的类方法,反之亦然
三、多态
1> 动态绑定的概念
- 在程序的执行期间判断所引用对象的实际类型,根据实际的类型调用其相应的方法
2> 基本使用
- 多态通常指多种形态
- 体现为父类指针指向子类对象
- 使用类动态绑定的概念
3> 优缺点
优点
① 当一个函数/方法用父类类型作为参数,可以接收父类、子类对象
② 降低了代码的冗余
缺点
① 不能使用父类指针调用子类的方法
② 编译器只会检测语法是否有误,只有在运行时才会根据动态绑定结果
调用相应的方法
4> 使用注意
- 多态必须以继承为基础,没有继承就没有多态
- 在运行时会动态检测指针指向的真正对象
- OC语言是弱语法,可以用用任何类型的指针指向一个已知的对象,只会发出警告
四、示例
/*
1.定义一个Animal类,方法:eat
2.定义一个Dog类和Cat类继承自Animal类
3.定义一个Person类,属性:animal(Dog或Cat);方法:feed(喂动物)
*/
#import <Foundation/Foundation.h>
/********Animal类*********/
@interface Animal : NSObject
//声明Animal的eat方法
- (void)eat;
@end
/*Animal类的实现*/
@implementation Animal
//此处可以不实现,只在子类中实现,但是编译器会警告
- (void)eat
{
NSLog(@"Animal在吃")
}
ed
/*****Dog类继承自Animal****/
@interface Dog : Anmal
ed
/*Dog类的现*/
@implementationDog
//重写eat方法,使其符合Dg对象
- (voidea
{
NSLog(@"Dog在吃")
}
ed
/*****Cat类继承自Animal****/
@interface Cat : Anmal
ed
/*Cat类的现*/
@implementationCat
//重写eat方法,使其符合Ct对象
- (voidea
{
NSLog(@"Cat在吃")
}
ed
/****Person类用有Animal***/
@interface Person : NSObec
{
//使每个人拥有一个动物,用组合
Animal *_anial
}
//为_animal属性设置set和gt方法
- (void)setAnimal:(Animal *)anial;
- (Animal *)anial;
//声明一个方法,使人能给自己用有的相应物喂食
- (void)fed;
ed
/*Person类的现*/
@implementation Peson
- (void)setAnimal:(Animal *)anma
{
_animal = anial
}
- (Animal *)anma
{
return _anial
}
- (void)ee
{
[_animal et]
}
ed
/******测试函数main******/
int man(
{
//创建两个Persn对象
Person *p = [Person nw];
Person *p2 = [Person nw];
//创建一个Dg对象
Dog *d = [Dog nw];
//创建一个Ct对象
Cat *c = [Cat nw];
//给对象p的Animal属性赋值为Dg对象
[p setAnimald];
//给对象p的Animal属性赋值为Ct对象
[p2 setAnimalc];
//调用p、p2的feed方法,检测态效果
[p fed];
[p2 fed];
retur 0;
}
OC语言-03-OC语言-三大特性的更多相关文章
- 转 OC温故:类的三大特性(封装,继承,多态)
原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性 ...
- 面试问题之C++语言:面向对象的三大特性
转载于:https://www.cnblogs.com/BEN-LK/p/10720249.html 面向对象的三大特性:封装.继承.多态 封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和 ...
- OC语言-02面向对象的三大特性
01封装 #import <Foundation/Foundation.h> @interface Student : NSObject { //@public 成员变量尽量不使用 int ...
- CSS系列 (03):CSS三大特性
层叠性 层叠性指的是样式的优先级,当产生冲突时以优先级高的为准,优先级相同时取后面定义的属性样式. 继承性 继承性指的是子孙元素可以继承父元素的属性. 记录一下开发中常用的继承属性: 字体系列 fon ...
- (转载)OC学习篇之---类的三大特性:封装,继承,多态
之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今 ...
- OC学习篇之---类的三大特性(封装,继承,多态)
之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习 ...
- oc语言--面向对象的三大特性
一.封装 1.什么是封装 在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将对象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的 ...
- 黑马程序员——OC语言 三大特性之多态
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之一的多态 (一)多态的基本概念 OC对象具有多态性体现在 Per ...
- 黑马程序员——OC语言 三大特性之继承
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之继承 (一)继承的基本用法 先建立个Animal再用Dog继承前 ...
- OC学习2——C语言特性之函数
1.OC是在C语言的基础上进行扩展的,在OC中直接用C语言进行coding也是可以通过编译的.因此,函数定义的语法格式如下: 函数返回值类型 函数名(形参列表) { //由零条或多条可执行性语句组成的 ...
随机推荐
- 斜堆(三)之 Java的实现
概要 前面分别通过C和C++实现了斜堆,本章给出斜堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 斜堆的介绍2. 斜堆的基本操作3. 斜堆的Java实现(完整源码)4. ...
- Transact-SQL 示例 - UPDATE中使用INNER JOIN
一般情况下博主已经对在SELECT语句当中使用INNER JOIN非常娴熟,但在UPDATE当中使用INNER JOIN的场景就为数不多了.以下博主将为你介绍在UPDATE场景当中使用INNER JO ...
- HMM 自学教程(六)维特比算法
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- iOS-UITextField-通知
二.处理文本框与键盘之间的关系(当键盘弹出遮挡到文本框的时候进行调整) 原理: 首先要明白: 1,键盘隐藏的时候,键盘上边界紧贴屏幕最低端,键盘在屏幕正下方. 2:键盘弹起的时候,键盘下边界跟屏幕下边 ...
- 2 Servlet基础
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 1. 从浏览器访问Servlet的流程 刚才发现,这里的图片不能正常显示,所以我给个链接,大家可以下载下来看从浏 ...
- Linux的Cgroup
为什么要有cgroup Linux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源.也就是能完成一组容器的概念,在这个容器中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等.于是就 ...
- linux内核分析课程笔记(二)
运行一个精简的操作系统内核 存储程序计算机是几乎所有计算机的基础逻辑框架. 堆栈是计算机中非常基础的东西,在最早计算机没有高级语言时,在高级语言出现之前,我们没有函数的概念.但高级语言出现后有了函数调 ...
- [Solution] 简单数字识别之Tesseract
图像识别涉及的理论:傅里叶变换,图形形态学,滤波,矩阵变换等等. Tesseract的出现为了解决在没有这些复杂的理论基础,快速识别图像的框架. 准备: 1.样本图像学习,预处理 (平均每1个元素出现 ...
- 自定义ConfigurationSection,创建多个嵌套的ConfigurationElementCollection节点
由于接口地址都是固定的,所以想到使用自定义节点,来将接口都配置到web.config中. 很快,v1.0版本出炉: public class RequestConfigSection : Config ...
- DataSet导出到Excel,并生成文件(C#实现,可合并行和列)
using System; using System.IO; using System.Data; using System.Reflection; using System.Diagnostics; ...