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
OC-封装、继承、多态相关推荐
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...
- python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)
面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...
- python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态
六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...
- python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息
编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...
- c语言编程 菲薄拉,C语言设计模式-封装-继承-多态
快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...
- 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)
面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...
- 小白理解——封装继承多态
一.封装 是什么:首先是抽象,把事物抽象成一个类,其次才是封装.对外表示为一个对象,隐藏对象的属性和动作实现的细节,仅对外公开接口. ...
- Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态
Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...
- 面向对象 编程及面向对象三大属性:封装 继承 多态
面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构. ...
- 白话文带你了解 封装 继承 多态
这里讲的仅仅是带你理解 封装 继承 多态 染好您可以移步去别的文章学习具体的实现 (只是个人理解 您可以不爱,请别伤害哦!) 首先你要知道 java是面向对象的,说白了就是我拿你当个人,请认清你的地位 ...
最新文章
- 南工计算机调剂,南京工业大学2021年硕士研究生调剂公告
- 关于stm32芯片解锁方法
- JUC锁框架——CyclicBarrier
- visionpro定位不跟随图像_机器视觉应用越来越多!不懂怎么办?在线公开课免费学...
- 起点低,是彪悍的最好证明!
- c语言编程三问三答,c语言程序编程
- Spring Boot 入门程序
- 二分的思想在算法中体现
- (49)FPGA面试题2-4译码器实现
- MySQL实现类似Oracle的序列
- linux vi 中s 替换方法
- ISL - Ch.2 Statistical Learning
- 10个python经典小游戏(上)-五一嗨起来(动图演示+源码分享)
- linux 小巧的浏览器,崇尚简约 六款小体积浏览器推荐
- java 工作流 详解
- 自动化会议提交工作流程:部署到生产
- Linux CGroup之freezer分析与应用
- 项目集成腾讯移动直播总结--后端
- Linux延时(延迟)函数比较:介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
- BackTrack V5的汉化
热门文章
- 剑指offer:33-37记录
- leetcode119. 杨辉三角 II 你能比我代码更短吗?
- php 不同时区时间转换,在PHP中将DateTime字符串转换为不同的时区
- echarts 折线图 设置y轴最小刻度_【硬货】vue全家桶+Echarts+百度地图,搭建数据可视化系统...
- ubuntu下clion软件连接boost库文件
- 密码学数字信封的介绍
- Docker容器基本使用
- 中科大 计算机网络16 P2P应用
- 历史上最有影响力的10款开源项目
- 专访阿里云总裁王文彬:做出“用得爽”的工程产品