封装的好处:

  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. 搭建Spring + SpringMVC + Mybatis框架之一(创建项目)

    创建项目 用maven管理项目很方便,不用手动下载jar包,直接在pom.xml配置文件中,maven可以帮助我们自动下载,非常方便 新建一个web project,添加maven支持就可以了,这样创 ...

  2. [C++基础]随机数,随机种子数

    #include <stdlib.h> #include <iostream> #include <ctime> using namespace std; void ...

  3. ProgressCircular

    https://github.com/eltld/ProgressCircular

  4. 即时通信(RPC)的Rtmp实现--代码实现篇

    实现的一般步骤是: step 1: 定义NetConnection对象连接rtmp,并监听NetStatusEvent.NET_STATUS事件 step 2: 在NetStatusEvent.NET ...

  5. wampserver下打开phpMyAdmin出现403错误的问题解决方法

    图1 图2 wamp下打开phpMyAdmin出现403错误的问题解决方法安装完wamp后打开其下的phpMyAdmin也就是路径http://localhost/phpmyadmin/ 出现[图一] ...

  6. 《转》Java中HashMap详解

    HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实 ...

  7. QT核心编程之Qt线程 (c)

    QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...

  8. C# 自定义重绘DataGridView

    using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using Syste ...

  9. 企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[3]

    转载:http://quweiprotoss.wap.blog.163.com/ Solr Cell是一个针对Tika的简单适配器,它由一个SAX ContentHandler组成,ContentHa ...

  10. 保持查询语法指示的联接顺序Option(Force order)

    Option(Force order) 今天和大家分享一下 SQL中强制执行联接顺序Option(Force Order) 一.SQL本身SQL引擎优化已经做的非常好了,但是也有默认的多表连接引擎效果 ...