封装的好处:

  1. 过滤不合理的值
  2. 屏蔽内部的赋值过程
  3. 让外界不必关注内部的细节

继承的好处:

  1. 不改变原来模型的基础上,拓充方法

  2. 建立了类与类之间的联系

  3. 抽取了公共代码

  4. 坏处:耦合性强(当去掉一个父类,子类将不能再使用)

继承的注意点:

  1. 子类和父类不能有相同的成员变量
  2. 子类可以重写父类的方法
  3. 子类方法和属性的访问过程:如果子类没有,就去访问父类的

继承和组合:

 @interface Score : NSObject
{
int _cScore;
int _ocScore;
}
@end @implementation Score
@end @interface Student : NSObject
{
Score *_socre; // 这里用到组合,因为不能说成绩是个学生
int _age;
}
@end @implementation Student
@end

组合和继承可以这样理解:

  • 继承是 xxx 是 xxx
  • 组合是 xxx 拥有 xxx

多态:不同的对象已自己的方式响应相同名称方法的能力称为多态

多态简单的说就是:父类指针指向子类对象

多态的好处:

  • 用父类接收参数,节省代码
#import <Foundation/Foundation.h>
@interface Animal : NSObject
@end @implementation Animal
- (void)eat
{
NSLog(@"Animal----eat food");
}
@end @interface Dog : Animal
@end @implementation Dog
- (void)eat
{
NSLog(@"Dog----eat food");
}
@end @interface Cat : Animal
@end @implementation Cat
- (void)eat
{
NSLog(@"Cat----eat food");
}
@end // 参数中使用的父类类型,可以传入子类、父类对象
void feed(Animal *a)
{
[a eat];
}
// 这个函数体现了多态的好处,节省了代码
int main()
{
Animal *aa = [[Animal alloc] init];
feed(aa);
Dog *dd = [[Dog alloc] init];
feed(dd);
Cat *cc = [[Cat alloc] init];
feed(cc);
}

多态的局限性:

  • 父类类型的变量 不能 直接调用子类的特有方法 (要用到强制转换)
// 强制转换
Person *p = [[Student alloc] init];
// 假如学习是学生特有的方法,如果想调用需要强制转换
// OC是弱语法如果用[p study]也可以(是动态绑定),但由于编译器会出现警告,所以不要这么写用强制转换 让其更合理
Student *s = (Student *)p;
[s study];
  • 动态绑定:在运行时根据对象的类型确定动态调用的方法

分类-Category:

分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法 (便于合作开发)

分类的使用注意:

  1. 分类只能增加方法,不能增加成员变量
  2. 分类方法实现中可以访问原来类中的声明的成员变量
  3. 分类可以重新实现原来类中的方法,但会覆盖掉原来类中的方法 ,会导致原来的方法不能使用(所以一般不会在分类中重现实现原来类中的方法)
  4. 方法调用的优先级:分类(最后参与编译的分类优先)---> 原来类 ---> 父类

Objective-C中的封装、继承、多态、分类的更多相关文章

  1. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  2. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  3. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  4. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  5. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

  6. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  7. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

  8. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  9. C语言设计模式-封装-继承-多态

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

  10. java四大特性理解(封装继承多态抽象)

    封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...

随机推荐

  1. C++ Code_StatusBar

    主题 1. 创建状态栏 并显示 2. 在状态栏中显示进度条 3. MDI文档显示和隐藏状态栏 4. 5.     代码::创建状态栏 并显示 //手动添加3个ICON //////////////// ...

  2. TP复习6

    ## ThinkPHP 3.1.2 查询方式#讲师:赵桐正微博:http://weibo.com/zhaotongzheng 本节课大纲:一.普通查询方式 a.字符串 $arr=$m->wher ...

  3. iOS开发——UI篇Swift篇&UIWebView

    UIWebView //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAn ...

  4. Linux TCP队列相关参数的总结 转

        在Linux上做网络应用的性能优化时,一般都会对TCP相关的内核参数进行调节,特别是和缓冲.队列有关的参数.网上搜到的文章会告诉你需要修改哪些参数,但我们经常是知其然而不知其所以然,每次照抄过 ...

  5. 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  6. 如何利用log4Net自定义属性配置功能记录完整的日志信息

    log4Net作为专业的log记录控件,对于它的强大功能大家一定不陌生.下面我将详细介绍如何利用其自定义属性,让日志信息更完整. 一,创建测试工程,log4Net组件可以自己从网上下载,也可通过Nug ...

  7. socket通信简介

    转:http://blog.csdn.net/xiaoweige207/article/details/6211577 “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的 ...

  8. GCD调度组、自定义队列来实现多个下载任务

    #define KURL1 @"http://img0.imgtn.bdimg.com/it/u=79920747,2237302485&fm=90&gp=0.jpg&quo ...

  9. How to solve the SVDI SN Number Display Problem

    Yesterday we have learn how to find the SVDI Serial Number, today one of customer from UK look our a ...

  10. leetcode 题解:Remove Duplicates from Sorted Array II(已排序数组去三次及以上重复元素)

    题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...