Objective-C中的封装、继承、多态、分类
2016-04-28 15:53
369 查看
封装
继承
多态
封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 继承现有类 + 扩展 通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 继承的过程,就是从一般到特殊的过程。 要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。 在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。 继承概念的实现方式有三类:实现继承、接口继承和可视继承。 Ø 实现继承是指使用基类的属性和方法而无需额外编码的能力; Ø 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力; Ø 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。 在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。 抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class。
多态
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针,不同对象以自己的方式响应相同的消息的能力叫做多态。 在Objective-C中如何实现多态 在Objective-C中是通过一个叫做selector的选取器实现的。在Objective-C中,selector有两个意思, 当用在给对象的源码消息时,用来指方法的名字。它也指那个在源码编译后代替方法名的唯一的标识符。 编译后的选择器的类型是SEL有同样名字的方法、也有同样的选择器。你可以使用选择器来调用一个对象的方法。 选取器有以下特点: 所有同名的方法拥有同样的选取器 所有的选取器都是不一样的 (1) SEL和@selector 选择器的类型是 SEL。@selector指示符用来引用选择器,返回类型是SEL。 例如: SEL responseSEL; responseSEL = @selector(loadDataForTableView:); 可以通过字符串来得到选取器,例如: responseSEL = NSSelectorFromString(@"loadDataForTableView:"); 也可以通过反向转换,得到方法名,例如: NSString *methodName = NSStringFromSelector(responseSEL); (2) 方法和选取器 选取器确定的是方法名,而不是方法实现。这是多态性和动态绑定的基础,它使得向不同类对象发送相同的消息成为现实;否则,发送 消息和标准C中调用方法就没有区别,也就不可能支持多态性和动态绑定。 另外,同一个类的同名类方法和实例方法拥有相同的选取器。 (3) 方法返回值和@参数类型 消息机制通过选取器找到方法的返回值类型和参数类型,因此,动态绑定(例:向id定义的对象发送消息)需要同名方法的实现拥有相同返回值类型和相同的参数类型;否则,运行时可能出现找不到对应方法的错误。 有一个例外,虽然同名灶方法和实例方法拥有相同的选取器,但是它们可以有不同的参数类型和返回值类型。
相关文章推荐
- Objective-C中的@property和@synthesize用法
- iOS利用block实现链式编程方法(Objective-C链式编程)
- Objective-C 学习笔记(1)——类与对象
- git 错误 fatal: Not a valid object name: 'master'.
- java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $
- Object类
- 目标检测“Exploit All the Layers: Fast and Accurate CNN Object Detector with Scale Dependent Pooling and”
- potential leak of an object stored into xxx
- Object-c------多态
- 如何给List<Map<String, Object>> list 增加值和修改值
- Object-c------继承
- [乐意黎原创]php 抛Fatal error: Cannot use object of type stdClass as array in XXX的解决方法
- Xcode插件管理工具CocoaPods安装教程
- Objective-C中字符串NSString的常用操作方法总结
- [Angular 2] Using a Reducer to Change an Object's Property Inside an Array
- different object with the same identifier value was already associated with the session 问题解决
- Objective-C中的block代码块的使用
- 2.Samba安装问题:error while loading shared libraries: libXXX.so.X: cannot open shared object file
- Object-c------self
- ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper的解决办法