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

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-封装、继承、多态相关推荐

  1. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

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

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

  3. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  4. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

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

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

  6. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

  7. 小白理解——封装继承多态

                                      一.封装 是什么:首先是抽象,把事物抽象成一个类,其次才是封装.对外表示为一个对象,隐藏对象的属性和动作实现的细节,仅对外公开接口. ...

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

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

  9. 面向对象 编程及面向对象三大属性:封装 继承 多态

    面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构. ...

  10. 白话文带你了解 封装 继承 多态

    这里讲的仅仅是带你理解 封装 继承 多态 染好您可以移步去别的文章学习具体的实现 (只是个人理解 您可以不爱,请别伤害哦!) 首先你要知道 java是面向对象的,说白了就是我拿你当个人,请认清你的地位 ...

最新文章

  1. 南工计算机调剂,南京工业大学2021年硕士研究生调剂公告
  2. 关于stm32芯片解锁方法
  3. JUC锁框架——CyclicBarrier
  4. visionpro定位不跟随图像_机器视觉应用越来越多!不懂怎么办?在线公开课免费学...
  5. 起点低,是彪悍的最好证明!
  6. c语言编程三问三答,c语言程序编程
  7. Spring Boot 入门程序
  8. 二分的思想在算法中体现
  9. (49)FPGA面试题2-4译码器实现
  10. MySQL实现类似Oracle的序列
  11. linux vi 中s 替换方法
  12. ISL - Ch.2 Statistical Learning
  13. 10个python经典小游戏(上)-五一嗨起来(动图演示+源码分享)
  14. linux 小巧的浏览器,崇尚简约 六款小体积浏览器推荐
  15. java 工作流 详解
  16. 自动化会议提交工作流程:部署到生产
  17. Linux CGroup之freezer分析与应用
  18. 项目集成腾讯移动直播总结--后端
  19. Linux延时(延迟)函数比较:介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
  20. BackTrack V5的汉化

热门文章

  1. 剑指offer:33-37记录
  2. leetcode119. 杨辉三角 II 你能比我代码更短吗?
  3. php 不同时区时间转换,在PHP中将DateTime字符串转换为不同的时区
  4. echarts 折线图 设置y轴最小刻度_【硬货】vue全家桶+Echarts+百度地图,搭建数据可视化系统...
  5. ubuntu下clion软件连接boost库文件
  6. 密码学数字信封的介绍
  7. Docker容器基本使用
  8. 中科大 计算机网络16 P2P应用
  9. 历史上最有影响力的10款开源项目
  10. 专访阿里云总裁王文彬:做出“用得爽”的工程产品