------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. 跨域资源共享 CORS
  2. [转]2022 Flutter 宣布发布 Windows 正式版
  3. 通俗易懂!视觉slam第二部分——salm过程简介
  4. 全栈语音交互方案免费开放,这次扔开源炸弹的是Rokid
  5. python头像右上角加红色数字_利用python实现微信头像加红色数字功能
  6. linux开机grub loading,装系统,把grub给装没有了:“grub loading…… grub error 15”
  7. innerHTML、innerText和outerHTML的区别
  8. 【金融市场基础知识】——金融市场体系
  9. TensorFlow-Slim 教程(中文版)
  10. 各省省际对外非金融类直接投资流量情况(2009-2018年)
  11. 请问如何让路由器信号增强
  12. 格式化数据#1:数据存储|Database
  13. java int类型能表示的数值范围
  14. godaddy nginx_2020年7种最佳GoDaddy替代品(更便宜且更可靠)
  15. 拓嘉辰丰电商:拼多多店铺SUK如何设置
  16. 推荐给中学生的数学课外书:《几何原本》
  17. 详解Axis2实现Web Services之AXIOM篇
  18. java 获取home路径_关于JAVA_HOME等引用路径
  19. java利用实现大数阶乘(三种方法)
  20. js jq 动态加载js文件

热门文章

  1. WIN XP 广州政府大客户版+电脑疯子版+上海政府版+北京政府版
  2. 一个优秀的职场人必须知道的四点建议
  3. AttributeError: module ‘scipy.misc‘ has no attribute ‘toimage‘
  4. 安全系列之——主流 Hash 散列算法介绍和使用
  5. 百分点推荐引擎——需求与架构——案例分析
  6. P5016 [NOIP2018 普及组] 龙虎斗
  7. Ubuntu18.04 fcitx搜狗拼音输入法候选栏英文乱码
  8. win10错误代码0x80070005解决方法
  9. Windows Phone简易绘画板
  10. python 手写选择排序(不用sort)