------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

封装
set方法
1、作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
2、命名规范:
1>方法名必须以set开头
2>set后面跟上成员变量的名称,成员变量的首字母必须大写
3>返回值一定是void
4>一定要接收一个参数,而且参数类型跟成员变量类型一致
5>形参的名称不能跟成员变量名一样
//set方法的实现
@interface Student : NSObject
{
int age;
}
- (void)setAge:(int)newAge;
- (void)study;
/*
    get方法
1、作用:返回对象内部的成员变量
2、命名规范
1>肯定有返回值,返回值类型肯定与成员变量类型一直
2>方法名跟成员变量名一样
3>不需要接收任何参数
*/
- (int)age;
@end
@implementation Student
- (void)setAge:(int)newAge
{  //对传递进来的值进行过滤
if (newAge <= 0)
{
newAge = 1;
}
age = newAge;
}
- (void)study
{
NSLog(@"%d岁的人正在学习",age);
}
- (int)age
{
return age;
}
@end
int main()
{
// 创建类的实例对象
Student *s = [Student new];
// 为成员变量_age赋值
[s setAge:0];
NSLog(@"学生的年龄是%d岁", [s age]);
return 0;
}
成员变量的命名规范
   1、一定要以下划线_开头
2、作用:
1>让成员变量和get方法的名称区分开
2>可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量
封装的好处
   1、过滤不合理的值
2、屏蔽内部的赋值过程
3、让外界不必关注内部细节
练习:
/*
 4.设计一个成绩类
 1> 属性
 * C语言成绩
 * OC成绩
 * iOS成绩
 
 2> 行为
 * 比较C语言成绩:跟另外一个成绩对象比较C语言成绩,返回成绩差(自己 - 其他成绩)
 * 比较OC成绩:跟另外一个成绩对象比较OC语言成绩,返回成绩差(自己 - 其他成绩)
 * 比较iOS成绩:跟另外一个成绩对象比较iOS语言成绩,返回成绩差(自己 - 其他成绩)
 * 计算总分:算出3科成绩的总分
 * 计算平均分:算出3科成绩的平均分
 */
#import <stdio.h>
#import <Foundation/Foundation.h>
//声明Score类
@interface Score : NSObject
{int _cScore; //c语言成绩int _ocScore; //oc语言成绩int _iosScore; //ios语言成绩
}
//set方法设置c语言成绩
- (void)setCScore:(int)cScore;
//get方法,获取c语言成绩
- (int)cScore;
//比较c语言成绩
- (int)compareCScoreWithOther:(int)cScore;
@end
@implementation Score
//设置c语言成绩为成员变量赋值
- (void)setCScore:(int)cScore
{_cScore = cScore;
}
//获取成员变量c语言成绩
- (int)cScore
{return _cScore;
}
//c语言成绩与其他c语言成绩比较,返回差值
- (int)compareCScoreWithOther:(int)cScore
{return _cScore - cScore;
}
@end
int main()
{//创建一个学生的c语言成绩并进行初始化Score *c = [Score new];[c setCScore:88];int a = [c cScore];//再次创建一个学生的c语言成绩并进行初始化Score *c1 = [Score new];[c1 setCScore:89];int b = [c1 cScore];//两个c语言成绩进行比较int cs = [c compareCScoreWithOther:b];//输出c语言成绩NSLog(@"a=%d,b=%d,分数差=%d",a,b,cs);return 0;
}
对象方法
1、对象方法都是以-号开头
2、只能由对象来调用
3、对象方法中能访问当前对象的成员变量( 实例变量 )
类方法
1、类方法都是以+号开头
2、只能用类来调用
3、类中只有方法不能访问成员变量( 实例变量 )
类方法的好处和使用场合
1、不依赖于对象,执行效率高
2、能用类方法尽量用类方法
3、当方法内部不需要使用成员变量时,就可以改为类方法
可以允许类方法和对象方法同名
类方法注意:
    可能会引发死循环或闪退,自己调用自己。
+ (void)test
{
    //[Person test];//闪退死循环
    NSLog(@"调用了test方法");
     [Person test];//死循环
}
类方法练习:
/*计算器:1、计算两个数的和2、计算两个数的平均值注意:工具类基本没有成员变量,一般都是用类方法*/
#import <Foundation/Foundation.h>
//声明一个计算器类,包含两个类方法
@interface JiSuanQi : NSObject
+ (int)sumWithNum1:(int) num1 andNum2:(int)num2;
+ (int)averageWithNum1:(int) num1 andNum2:(int)num2;
@end
@implementation JiSuanQi
//获取两个整数的和
+ (int)sumWithNum1:(int) num1 andNum2:(int)num2
{return num1 + num2;
}
//获取两个整数的平均值
+ (int)averageWithNum1:(int) num1 andNum2:(int)num2
{//self返回类本身,调用求和函数int sum = [self sumWithNum1:num1 andNum2:num2];return sum/2;
}
@endint main()
{ //调用类方法求两个整数的和int sum = [JiSuanQi sumWithNum1:12 andNum2:18];//调用类方法求两个整数的平均值int avg = [JiSuanQi averageWithNum1:12 andNum2:18];//输出信息NSLog(@"两个数的和是:%d,平均值是%d",sum,avg);return 0;
}
继承
含义:一个类拥有另一个类中的所有属性和方法。
优缺点:
好处:
    1、抽取重复代码
    2、建立类之间的关系
    3、子类可以拥有父类中的所有成员变量和方法
缺点:耦合性太强    
使用场合
    1、当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
    2、当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类
    继承:xx 是 xxx
    A
    {
        int _age;
        int _no;
    }
    B:A
    {
        int _weight;
    }
    组合:xx 拥有 xxx
组合
    A
    {
        int _age;
        int _no;
    }
    B
    {
        A *_a;
        int _weight;
    }
重写
   子类重新实现父类中的某个方法,覆盖父类以前的做法。
注意
   1、基本上所有类的根类都是NSObject
2、父类必须声明在子类的前面
3、不允许子类和父类拥有相同的成员变量,但允许拥有相同的方法
4、调用某个方法时,优先去当前类中找,如果找不到,去父类中找
self
     概念:指向了当前对象或类(方法调用者)
    用途:
1、可以利用“self->成员变量名”访问当前对象内部的成员变量
2、[self 方法名];访问当前对象的方法。
注意:利用self调用自身方法会引发死循环。
super
    作用:
        1、直接调用父类中的某个方法
        2、super处在对象方法中,那么就会调用父类的对象方法   
            super处在类方法中,那么就会调用父类的类方法
        3、使用场合:子类重写父类的方法时想保留父类的一些行为
        
多态
1、没有继承就没有多态。
2、代码的体现:父类类型的指针指向子类对象。
3、好处:如果函数或方法参数中使用的弗雷类型,可以传入父类或子类的对象
4、局限性:
父类类型的变量不能直接调用子类特有的方法,如果一定要调用,则必须进行强制类型转换,转为子类类型变量后,才可以调用子类的特有方法。

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员- IOS学习笔记-OC三大特性相关推荐

  1. 黑马程序员-IOS学习笔记 99乘法表 打印

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流!------- 以前面试也遇到过,其实代码很少~~~ void print99(){ for(int i=1;i& ...

  2. 黑马程序员Maven学习笔记

    前言 这里是黑马程序员Maven学习笔记分享,这是视频链接. 我还有其它前端内容的笔记,有需要可以查看. 文章目录 前言 基础 Maven简介 Maven是什么 Maven的作用 Maven的下载 M ...

  3. 黑马程序员C++学习笔记(第三阶段核心:STL)--- 更新中

    目录 迭代器 序列式容器 vector -- 可随机访问 list -- 不支持随机访问 deque -- 动态 关联式容器 -- 红黑树 map multimap set multiset -- 废 ...

  4. 黑马程序员Javaweb学习笔记01

    该博客主要记录在学习黑马程序员Javaweb过程的一些笔记,方便复习以及加强记忆 文章目录 一 . BS架构,HTTP协议 http请求数据格式和相应数据格式 二 . web服务器 2.1 tomca ...

  5. 黑马程序员Javaweb学习笔记02【request和response】

    该博客主要记录在学习黑马程序员Javaweb过程的一些笔记,方便复习以及加强记忆

  6. 黑马程序员C++学习笔记<第一阶段_基础篇>

    配套视频网址: 黑马程序员:http://yun.itheima.com/course/520.html?bili B站:https://www.bilibili.com/video/BV1et411 ...

  7. 黑马程序员SSM-MyBatisPlus学习笔记

    目录 一.MyBatisPlus简介 1.1 SpringBoot整合MyBatisPlus入门程序 1.2 MyBatisPlus概述 二.标准数据层开发 2.1 标准数据层CRUD功能 2.2 分 ...

  8. 黑马程序员-C#学习笔记(二)

    ---------------------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------------------- - C# 学习笔记 一.变量与表达 ...

  9. 【黑马程序员JVM学习笔记】01.引言

    1. 什么是JVM? 定义: Java Virtual Machine,Java程序的运行环境(Java二进制字节码的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界检 ...

最新文章

  1. linux系统怎样连手机,Linux下手机与蓝牙的连接配置
  2. Mysql的timestamp与datetime
  3. 如何给小白解释什么是编解码器
  4. 最全的cisco ios下载,思科ios下载
  5. Java面试之JVM参数调优
  6. 作业帮电脑版在线使用_应届生应聘作业帮的在线辅导老师
  7. Go 语言本身提供的包管理机制
  8. pmod ad2 digilent 提供的pmodad2.c和pmodad2.h
  9. python win32api sendmessage_Python win32api.SendMessage方法代码示例
  10. centos未能加载虚拟光盘 C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions
  11. linux卸载小企鹅输入法,Linux(FC)小企鹅输入法的安装
  12. luci html 页面,luci更改登录账号.htm
  13. 揭秘:全球SaaS行业估值第三的巨头ServiceNow是如何计算流失率的?
  14. VCS(DVE)调试
  15. 线性代数 线性相关与线性表示的理解
  16. Nginx白名单设置
  17. wappush系统框架
  18. MCNP学习笔记之命令行与接续运行
  19. 旅游地理学期末(大学)
  20. GitHub7200星,一个可以白嫖全网无损音乐的神器

热门文章

  1. spring添加独立子事务
  2. 46个不可不知的生活小常识[推荐]
  3. 菜单-角色权限的操作
  4. 仿QQ音乐专辑图标旋转
  5. [学习笔记]Spring Cloud实战至投降(一)
  6. Windows生日快乐!问世27年大事记
  7. brvah树状结构默认展开第一个_BRVAH官方使用指南(持续更新)
  8. 开店创业缺什么都不能缺水獭掌柜,外卖接单有它太省心
  9. 主从数据库的配置以及主从数据库的同步(MySQL)
  10. 国标平台对接成功,预览失败,下级双网域设置错误