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

一、封装

封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。简而言之,信息隐藏,隐藏对象的实现细节,不让用户看到,以此来增强安全性和简化编程,进而达到封装的目的。

使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

访问修饰符:private、protect、public

private:私有的,不可供外部访问的信息,只有类本身能存取.

protect:受保护的,类和派生类可以存取.

Internal:只有同一个项目中的类可以存取.

Protected Internal:是Protected和Internal的结合.

Public:公有的,完全共享存取.

二、继承

Objective-C 的继承具有单继承的特点,每个子类都只能有一个直接父类。然而,他可以有无限多个间接父类。

当子类继承父类时,子类可以得到父类的:

1.全部成员变量

2.全部方法

OC中子类继承父类语法格式:

 @interface 类名:父类名
{
//成员变量
}
//方法
@end

另外,需要注意的是NSObject类是根类,所有的类的父类(直接父类或间接父类)。

说到父类,就得讲到super关键字

super关键字在实例方法中代表父类对象的本身,在类方法中代表父类,可以使用super关键字调用从父类继承下来的方法。

在实例方法中使用super只能调用到父类的实例方法,在类方法中使用super只能调用到父类的类方法。

 @interface Person:NSObject
{ }
-(void)run;//这是实例方法
+(void)sleep;//这是类方法
@end
@interface Student:Person
{ }
@end
 @implementation Student
-(void)testRun{
[super sleep];//这是错误的,因为sleep是类方法。在实例方法中,super只能调用父类的实例方法
[super run];
}
+(void)testSleep{
[super sleep];
[super run];/这是错误的,因为run是实例方法。在类方法中,super只能调用父类的类方法
}

三、多态

多态:一种事物的多种形态。不同类的对象可以定义共享相同名称的方法,这个就是多态的表现形式。

实现多态的条件:

1.必须存在继承关系

2.子类重写父类的方法

3.父类声明的变量指向子类对象

OC指针类型的变量有两个:编译时类型和运行时类型。编译时类型由声明变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现多态。

 @interface Person:NSObject
{
}
4-(void)run;
@end
 @interface Student:Person
{ }
@end
 @interface Teacher:Person
{ }
@end
1 Person *personStudent=[[Student alloc]init];//此时编译时类型和运行时类型不一致,发生多态
[personStudent run];
Person *personTeacher=[[Teacher alloc]init];
[personTeacher run];//父类Person的run方法表现的形式为多种形态,这就叫多态

OC的封装、继承与多态的更多相关文章

  1. day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态

    Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要 ...

  2. objective-c自学总结(三)---面向对象的封装,继承与多态

    面向对象的三大特性 封装 继承 多态 1.封装: 隐藏属性,方法或实现细节的过程称为封装 信息隐藏,隐藏对象的实现细节,不允许用户看到 将东西包装在一 然后以新的完整形式呈现出来 例如,两种或多种化学 ...

  3. iOS开发-OC语言 (七)继承、多态、类别

    继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ======================== ...

  4. python 面向对象及封装继承和多态

    ######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...

  5. C++之封装继承和多态

    C++中非常重要的概念,尤其是相对于C语言而言,也是其具有如此高的工程使用性的重要原因. 封装 所谓封装是将某些东西隐藏起来,让外界无法直接使用,而必须通过某些特定的方式才能访问.也即是,将抽象得到的 ...

  6. Java的封装继承和多态

    封装 定义:属性私有private:get/set 目的 提高程序的安全性,保护数据 隐藏代码的实现细节 统一接口 提高系统的可维护性 代码 public class Student { //名字 p ...

  7. java封装继承以及多态(含代码)

    封装 该露的露,该藏的藏 我们常需设计要追求,"高内聚,低耦合".高内聚就是类的内部数据操作细节自己完成.不允许外部干涉:低耦合:仅暴漏少量的方法给外部使用. 封装(数据的隐藏) ...

  8. (转载)OC学习篇之---类的三大特性:封装,继承,多态

    之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今 ...

  9. 转 OC温故:类的三大特性(封装,继承,多态)

    原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性 ...

随机推荐

  1. 在Visual Studio中设置多核并行编译

    VS是一款非常强大实用的IDE,是在Windows环境下学习编程的首选软件. 有些时候大一点的工程项目编译要耗时挺长时间,随便修改一下代码就可能要编译将近一分钟,甚至更多.即便在开启的增量编译的情况下 ...

  2. MSXML应用总结

    MSXML的DOM模型是符合W3C DOM标准的,而DOM API在Windows中以COM接口的形式提供,关于COM请大家查阅相关资料.简单来说,COM提供了一个环境和一套规则,使接口的设计实现到对 ...

  3. 【耐克】【Air Max90 气垫跑鞋】

    [max90 36-44] [加毛冬款 36-44] [黑白百搭款 36-44] [air max90 高帮 冬款 耐看百搭 36-44] [air max90 高帮 40-44] [Air Max9 ...

  4. c# List的排序

    list 是我们常用到的数据类型,我们常常会用list去处理很多的数据.我们也常常会有这样的一个操作,就是排序sort list 所在的命名空间是System.Collections.Generic ...

  5. 如何让老式浏览器支持html5新增的语义元素

    html5新增加了一些语义元素,如header, footer, nav, aritcle, aside,等等. 然而,有些老款浏览器无法识别这些元素,会把它们当成 inline 元素对待,这会导致一 ...

  6. 05:统计单词数【NOIP2011复赛普及组第二题】

    05:统计单词数 总时间限制:  1000ms 内存限制:  65536kB 描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次 ...

  7. k8s dashboard 部署发布

    https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml # Copyright 2015 ...

  8. Android应用开发-网络编程(二)(重制版)

    Apache HttpClient框架 GET方式请求提交数据 1. 创建一个HttpClient HttpClient hc = new DefaultHttpClient(); 2. 创建一个Ht ...

  9. PHP foreach使用

    <?php $arr = array("1"=>"100","2"=>"200","3&qu ...

  10. javascript基础二数据类型

    1.数据类型 javascript中的基本数据类型有4中,undefined,number,string,boolean 1.1 typeof关键字 typeof关键字可以获取一个变量的的类型.先举个 ...