OC-封装、继承、多态

面向对象的三大特征:封装、继承、多态

1.封装

什么是封装:在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将对象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

1> set方法
① 作用:提供一个方法给外界设置成员变量值,实现对参数的相应过滤

② 命名规范

   *方法名必须以set开头

   *set后面跟上成员变量的名称,成员变量名首字母必须大写

   *返回值一定是void

   *一定要接收一个参数,而且参数类型跟成员变量类型一致

   *形参的名称不能跟成员变量名一样
eg:

#import <Foundation.foundation.h>@interface Student : NSObject  : NSObject //声明一个类
{int _age;//设置一个成员变量
}- (void)study;//声明一个study对象方法
- (void)setAge:(int)age;//声明set方法@end@implementation Student //对声明的方法进行实现- (void)setAge:(int)age //set方法的实现
{if(age <= 0)  //对不合理的值进行过滤{age = 1;}_age = age;
}- (void)study  //study方法的实现
{NSLog("%d岁的学生在学习",age);
}@endint main()
{Student *stu = [Student new];//新建一个Student类型对象[stu setAge :10];//调用set方法进行赋值操作[stu study];// 对象调用对象方法return 0;
}

2> get方法
  ①作用:返回成员变量值

  ②命名规范

   *有返回值,返回值类型与成员变量类型相同

   *方法名跟成员变量名相同

   *不需要接收任何参数

eg:

#import <Foundation.foundation.h>@interface Student : NSObject //声明一个类
{int _age;//设置一个成员变量
}- (void)study;//声明一个对象方法
- (void)setAge:(int)age;//声明set方法
- (int)age;//声明get方法@end@implementation Student //对声明的方法进行实现- (void)setAge:(int)age //set方法的实现
{if(age <= 0)  //对不合理的值进行过滤{age = 1;}_age = age;
}- (int)age // get方法的实现
{return _age;
}- (void)study  //study方法的实现
{NSLog("%d岁的学生在学习",[stu age]);//get方法的调用
}@endint main()
{Student *stu = [Student new];//新建一个Student类型对象[stu setAge :10];//调用set方法进行赋值操作[stu study];// 对象调用对象方法return 0;
}

3> 封装细节

 ①成员变量名以_开头,命名规范

  *作用1,让成员变量名与get方法名区分开

  *作用2,跟局部变量名分开,带_一般就是成员变量名

eg:

#import <Foundation.Foundation.h>@interface Score : NSObject //声明Score类
{int _cScore;//设置成员变量 _cScoreint _ocScore;//设置成员变量 _ocScoreint _totalScore;//设置成员变量 _totalScoreint _averageScore;//设置成员变量 _averageScore
}- (void)setCScore:(int)cScore;//声明set方法
- (int)cScore;//声明get方法- (void)setOcScore:(int)ocScore;//声明set方法
- (int)ocScore;//声明get方法- (int)totalScore;//声明get方法
- (int)averageScore;//声明get方法@end@implementation Score //方法的实现- (void)setCScore:(int)cScore //set方法的实现
{_cScore = cScore;_totalScore = _cScore + _ocScore;//计算总分,监听成员变量的改变_averageScore = _totalScore/2;//计算平均分
}- (int)cScore // get方法的实现
{return _cScore;
}- (void)setOcScore:(int)ocScore //set方法的实现
{_ocScore = ocScore;_totalScore = _cScore + _ocScore; //计算总分,监听成员变量的改变_averageScore = _totalScore/2;//计算平均分
}- (int)ocScore // get方法的实现
{return _ocScore;
}- (int)totalScore // get方法的实现
{return _totalScore;
}
- (int)averageScore // get方法的实现
{return _averageScore  ;
}@endint main()
{Score *sc = [Score new];int t = [sc _totalScore];int a = [sc _averageScore];NSLog("总分是%d,平均分是%d",t, a);return 0;
}

4> 封装的好处

  *过滤不合理的值

  *屏蔽内部的赋值过程

  *让外部不必关注内部细节

5类方法和对象方法对比

1> 类方法:

  1、以加号+开头2、只能用类名调用,对象不能调用3、类方法中不能访问实例变量(成员变量)4、使用场合:当不需要访问成员变量的时候,尽量用类方法

2> 对象方法:

1、以减号-开头

2、只能让对象调用,没有对象,这个方法根本不可能被执行

3、对象方法能访问实例变量(成员变量)

3> 类方法和对象方法可以同名

Self:指向了方法调用者(为指向指针),代表当前对象

用self访问成员变量,区分同名的局部变量

1、使用细节

出现的地方:所有的OC方法中(对象方法\类方法),不能出现在函数

用法:

  "self->成员变量名" 访问当前方法调用的成员变量"[self 方法名];"   来调用方法(对象方法\类方法)

2、常见错误

低级错误:用self去调用函数类方法中用self调用对象方法,对象方法中用self调用类方法,使self死循环

转载于:https://www.cnblogs.com/wlios/p/4631866.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Ac 控件,Android控件--MultiAutoCompleteTextView

1.功能可支持选择多个值(在多次输入的情况下)&#xff0c;分别用分隔符分开&#xff0c;并且在每个选中的时候再次输入值时会自动匹配&#xff0c;可用在发短信、发邮件时选择联系人这种类型当中。2.独特属性android:completionThreshold"3" ----设置输入多少字符时自…

BZOJ1299 [LLH邀请赛]巧克力棒

怎么又是博弈论。。。我去 Orz hzwer&#xff0c;这道题其实是可以转化成Nim游戏的&#xff01; "第一步&#xff1a; 先从n根巧克力棒中取出m(m>0)根&#xff0c;使得这m根巧克力棒的xor和为0&#xff0c;同时使得剩下的n-m根巧克力棒无论怎么取&#xff0c;xor和都不…

android 安装应用程序apk安装不了

今天用测试机的时候遇到这个问题 解决办法&#xff1a; 在设置里面找到应用程序管理安全设置&#xff0c;&#xff0c;【允许未知来源程序安装】 -------------大致以上思路&#xff0c;具体按钮名称我就不重新去找了------------------

华为鸿蒙消费者,王成录谈鸿蒙挑战和华为消费者业务崛起

据 IDC 数据&#xff0c;全球智能手机出货量已连续 4 年下滑&#xff0c;在移动互联网之后&#xff0c;IoT 被认为是下一个更大量级的机会。在此背景下&#xff0c;鸿蒙是华为力图在 IoT 时代继续领先的关键项目&#xff0c;而面对贸易封锁&#xff0c;鸿蒙也成了华为冲出重围的…

读小米的《参与感》书的摘录(一),与大家分享!

1、互联网思维就是口碑为王 其实在过去选择产品&#xff0c;我们也一直会通过朋友或专家的口碑推荐来做决策&#xff0c;但不是主流。而今天口碑为王的背后&#xff0c;我理解我们面临的信息传播发生了一下三个重要的转变&#xff1a;1、信息从不对称转变为对称&#xff1b;2、…

Fragment的保存

2019独角兽企业重金招聘Python工程师标准>>> 一、场景 在一个fragment播放语音文件&#xff0c;一旦设备发生旋转&#xff0c;播放将暂停。因为fragment将重新生成。具体的流程步骤如下&#xff1a; 二、解决的方式 在Fragment的onCreate方法中&#xff0c;设置s…

html+监听+页面滚动到底部,解决HTML5中滚动到底部的事件问题

问题&#xff1a;在H5中&#xff0c;我们有这样的需求&#xff1a;例如有列表的时候&#xff0c;滚动到底部时&#xff0c;需要加载更多。解决方案&#xff1a;可以采用window的滚动事件进行处理分析&#xff1a;如果滚动是针对整个屏幕而言的(不针对于某个界面小块)&#xff0…

SQL Server 存储引擎-剖析Forwarded Records

我们都知道数据在存储引擎中是以页的形式组织的,但数据页在不同的组织形式中其中对应的数据行存储是不尽相同的,这里通过实例为大家介绍下堆表的中特有的一种情形Forwared Records及处理方式. 概念 堆表中,当对其中的记录进行更新时,如果当前数据页无法满足更新行的容量,此时这…

买面包和IoC

今天上午准备去一个阿姨&#xff0c;在那里买面包。这可能是由于小尺寸她的&#xff0c;因此&#xff0c;管理不规范&#xff0c;所以&#xff0c;当你买面包。没有人行。即使所有的大学生&#xff0c;似几乎没有这种意识。。。 但让我感到震惊的是。尽管没有排队&#xff0c;但…

u3d游戏开发视频潭州_游戏美术行业的发展与应用人工智能学院专业介绍及未来前景系列报告会二...

为了让2020级新同学对动漫专业加深认识&#xff0c;更好的规划学习&#xff0c;学院于11月12日6点晚邀请了校企合作单位“369云遮月游戏公司”在长安校区图书馆阶梯教室进行了游戏美术行业的发展与应用的报告会&#xff0c;主题围绕“专业介绍与发展前景”展开&#xff0c;云遮…

html文件怎么生产vm页面,如何使用spring mvc将Html文件转换为.vm(velocity模板)文件...

首先&#xff0c;您需要清楚的是&#xff0c;当您使用MVC时&#xff0c;您可以以任何您想要的方式提供页面。这是您的问题的一个可能的解决方案&#xff0c;这是我自己的应用程序的实际代码。您可能想要像这样提供* .html请求。的web.xmlappServletorg.springframework.web.ser…

统计元音

Problem Description 统计每个元音字母在字符串中出现的次数。 Input 输入数据首先包括一个整数n&#xff0c;表示测试实例的个数&#xff0c;然后是n行长度不超过100的字符串。 Output 对于每个测试实例输出5行&#xff0c;格式如下&#xff1a; a:num1 e:num2 i:num3 o:num4 …

华为谷歌互利合作曝光:或将推Nexus手表

业内传言称&#xff0c;中国的华为科技公司和韩国LG电子公司&#xff0c;今年将为谷歌公司设计两款Nexus品牌的智能手机&#xff0c;这也将是华为科技第一次参加谷歌的Nexus硬件计划。日前&#xff0c;国外权威媒体披露了华为Nexus硬件计划的更多内容。除了一款5.7英寸的智能手…

unity2d随机生成物体_2020 年最好用的一键生成设计神器,全在这里了!

对于很多新手设计师来说&#xff0c;要高效率地完成一件看上去还不错的设计作品&#xff0c;其实并不是一件容易的事。特别是在现实的工作中&#xff0c;对于临危受命的任务&#xff0c;更是很少有人会耐心地等你慢慢去摸索的.……不慌&#xff0c;今天就掏出一份私藏已久的设计…

android MPV架构快速实现,不是所有的MPV都叫GL8,一体化智能座舱体验来袭

进入车内&#xff0c;首先映入眼帘的就是双12.3吋全液晶仪表及中控联屏&#xff0c;出色的画面质感在第一时间吸引了我的注意。当然&#xff0c;全新的一体化智能座舱理念&#xff0c;多屏互联、多维交互也是它的最大亮点之一。全新一代别克GL8家族采用迭代更新的通讯解决方案&…

基于SuperSocket的IIS主动推送消息给android客户端

在上一篇文章《基于mina框架的GPS设备与服务器之间的交互》中&#xff0c;提到之前一直使用superwebsocket框架做为IIS和APP通信的媒介&#xff0c;经常出现无法通信的问题&#xff0c;必须一天几次的手动回收程序池&#xff0c;甚至重起服务器&#xff0c;通常周末接到一个陌生…

教程-Delphi第三方控件安装卸载指南

1 只有一个DCU文件的组件。DCU文件是编译好的单元文件&#xff0c;这样的组件是作者不想把源码公布。一般来说&#xff0c;作者必须说明此组件适合Delphi的哪种版本&#xff0c;如果版本不对&#xff0c;在安装时就会出现错误。也正是因为没有源码&#xff0c;给使用者带来了不…

明细表如何添加重量_关于Revit中明细表标准的导出及导入

Revit中明细表的作用非常大&#xff0c;项目中的数据归类整理及统计都离不开它&#xff0c;今天给大家分享一下如何在Revit中进行明细表标准的导出及导入&#xff0c;减少在实际项目中的重复性工作。1. 首先在Revit中新建一个项目文件&#xff0c;在平面视图中随便画几条管道&a…

鸿蒙还是不是安卓,华为捐赠鸿蒙核心架构!是否形成“三足鼎立”?

发布会已经开完&#xff0c;万物互联时代也已开启。经过测试&#xff0c;鸿蒙系统支持几乎所有的安卓软件&#xff0c;换句话说安卓用户可以无缝过渡到鸿蒙系统&#xff0c;相比安卓&#xff0c;速度更快&#xff0c;耗电量更低&#xff0c;这无疑比安卓系统的体验好出一个档次…

BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划

题目 1613: [Usaco2007 Jan]Running贝茜的晨练计划 Time Limit: 5 Sec Memory Limit: 64 MBDescription 奶牛们打算通过锻炼来培养自己的运动细胞&#xff0c;作为其中的一员&#xff0c;贝茜选择的运动方式是每天进行N(1 < N < 10,000)分钟的晨跑。在每分钟的开始&…