1.类的继承

OC的继承是单继承,每个子类只有一个直接父类

1.1 继承的特点

OC继承的语法

  1. @interface SubClass :SuperClass
  2. {
  3. //成员变量定义
  4. }
  5. //方法定义部分

子类扩展父类,子类可以继承得到父类的:

  • 全部成员变量
  • 全部方法(包括初始化方法)

1.2 重写父类的方法

方法的重写必须注意方法签名关键字要完全相同,方法名和方法签名中的形参标签都要完全相同。

1.3 super

super 是OC的关键字,super用于限定该对象调用它从父类继承得到的属性或方法。

2.多态

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

2.1 多态性

2.2 指针变量的强制类型转换

转换语法:(type*)variable

2.3 判断指针变量的实际类型

判断指针变量实际指向的对象是否为某个类、某个子类的实例,通过如下两个方法完成。

  • -(BOOL) isKindOfClass:clazz:判断该对象是否为clazz或其子类的实例
  • -(BOOL) is SubclassOfClass:clazz :判断该对象是否为clazz的子类的实例
  1. NSObject* hello = @"hello";
  2. BOOL b1 = [hello isKindOfClass:[NSObject class]]
  3. BOOL b2 = [hello isKindOfClass:[NSString class]]

3.Objective-C 的包装类

OC提供了NSValue、NSNumber来封装C语言的基本类型,让他们具有面向对象的特征。

3.1 它们不是包装类

  • NSInteger:大致等于long型整数
  • NSUinteger :大致等于unsigned long型整数
  • CFFloat :在64位平台大致相当于double,在32为平台大致相当于float

3.2 NSValue和NSNumber

NSValue和NSNumber都是包装类,NSValue是NSNumber的父类,NSValue代表一个更通用的类,可用于包装单个short、int、long、float、char、指针、对象id等。

NSNumber是更具体的包装类。主要用于包装C语言的各种数值类型,主要方法:

  • +numberWithXxx 该类方法直接将特定类型的值包装成NSNumber
  • -initWithXxxx 该实例方法需要先创建一个NSNumber对象的实例,再用一个基本类型类初始化NSNumber
  • -xxxValue 该实例方法返回该NSNumber对象包装的基本类型的值

    xxx可以代表int、char等各种基本类型
  1. NSNumber* num = [NSNumber numberWithInt:20];
  2. NSNumber* de = [NSNumber numberWithDouble:3.4];
  3. //NSLog(@"%d",[num intValue]);
  4. NSLog(@"%g",[de doubleValue]);
  5. NSNumber* ch = [[NSNumber alloc] initWithChar:'J'];
  6. NSLog(@"%@",ch);

4.处理对象

4.1 打印对象和description方法

NSObject类提供的description方法总是返回<类名:16进制的首地址> 这个返回值。自动以自我描述,需要重写NSObject类的description方法

  1. -(NSString *) description
  2. {
  3. return ........
  4. }

4.2 == 和isEqual方法

OC判断相等由两种方法,一种是利用运算符,另一种是isEqual方法

使用类判断两个变量是否相等,如果两个变量是基本类型的变量,并且都是树脂类型,只要两个变量的值相等,判断就返回真。如果是两个指针类型的变量,它们必须指向同一个对象,返回真

isEqual:方法是NSObject提供的一个实例方法,所有指针变量都可以调用该方法判断是否与其他指针变量相等。NSString重写了NSObject的isEqual方法:只要2个字符串包含的字符序列相同,都返回真。

重写isEqual:方法提供自定义的相等标准。

5.类别与扩展

5.1 类别(category)

OC的动态特诊允许使用类别为现有的类添加新方法,不需要创建子类,不需要原有类的源代码。

类别定义由接口和实现部分组成,部分的语法:

  1. @interface 已有类(类别名)
  2. //定义方法
  3. ...
  4. @end
  5. @implementation 已有类(类别名)
  6. //方法实现
  7. ...
  8. @end

文件命名:头文件:类名+类别名.h 类别实现部分的文件名:类名+类别名.m

5.2 利用类别对类进行模块化设计

5.3 使用类别来调用私有方法

示例如下:

  1. #import <Foundation/Foundation.h>
  2. @interface FKItem:NSObject
  3. @end
  4. @implementation FKItem
  5. -(void) Console:(NSString*) msg
  6. {
  7. NSLog(@"%@",msg);
  8. }
  9. @end
  10. int main(int argc, char const *argv[])
  11. {
  12. @autoreleasepool{
  13. FKItem* item = [[FKItem alloc] init];
  14. [item Console:@"Objective-C"];
  15. }
  16. }

5.4 扩展(extension)

扩展和类别相似,扩展相当于匿名类别,定义语法:

  1. @interface 已有类()
  2. {
  3. 实例变量
  4. }
  5. //方法定义
  6. ...
  7. @end

Objective-C面向对象(三)的更多相关文章

  1. 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态

    一. Objective-C 方法详解 1. 方法属性 (1) OC 方法传参机制 Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值传 ...

  2. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  3. Python面向对象三要素-封装(Encapsulation)

    Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...

  4. iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

    本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS ...

  5. JavaScript 面向对象(三) —— 高级篇

    JavaScript 面向对象(一) —— 基础篇 JavaScript 面向对象(二) —— 案例篇 一.json方式的面向对象 首先要知道,js中出现的东西都能够放到json中.关于json数据格 ...

  6. JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式

      前  言 JRedu 在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 . 成员属性.静态属性.原型属性与JS原型链).今天 ...

  7. Python之面向对象三

    面向对象的三大特性: 多态 多态指的是一类事物有多种形态.Python3天生支持多态. 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCM ...

  8. Python面向对象(三)

    一.绑定方法与非绑定方法 一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的 2.绑定给类的方法:为类中定义的函数加上 ...

  9. Python面向对象三要素-多态

    Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...

  10. javascript面向对象(三):非构造函数的继承

    本文来自阮一峰 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承" ...

随机推荐

  1. TCP/IP之大明王朝邮差

    一位大神的精华之作,原创2016-05-12 刘欣 来自码农翻身! 时间: 大明王朝天启四年, 清晨. 天色刚蒙蒙亮,我就赶着装满货物的马车来到了南城门,这里是集中处理货物的地方,一队一队的马车都来到 ...

  2. Linux:/bin/bash和/bin/sh的区别

    bash.dash(/bin/bash和/bin/sh) 原文:http://www.cnblogs.com/dkblog/archive/2011/04/02/2003822.html Linux中 ...

  3. IPHONE 字体加粗

    UIFONT 没有字体加精参数,但可以修发,字体名,达到加粗的效果正常:Helvetica加粗"Helvetica-Bold""TimesNewRomanPS-BoldM ...

  4. 简单记事本程序java源码项目

    代码如下 import java.awt.*; import java.io.*; import java.awt.datatransfer.*; import java.awt.event.*; p ...

  5. 实例分析ELF文件动态链接

    参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第6章 可执行文件的装载与进程 第7章 动态链接 <Linux GOT与PLT> 开发平台 ...

  6. JAVA编程思想第一题出现错误

    //: object/E01_DefaultInitialization.java public class E01_DefaultInitialization{ int i ; char c ; p ...

  7. 结合Git实现Mysql差异备份,可用于生产环境

    埋头苦干多年一直没写过文章,今天突发狂想,为LNMP阵营贡献一些力量.就从平时工作过程中的心得和一些技巧分享出来.今天就猿们最熟悉的Mysql开始宅鸟的开篇博客文章.欢迎猿们拍砖.转载. 注意:宅鸟的 ...

  8. tomcat目录简介

    http://www.cnblogs.com/kerrycode/p/3588816.html 主目录下面有bin.lib等目录 bin 存放Tomcat启动.停止服务程序以及一些其他脚本程序 lib ...

  9. Run JavaScript on your PeopleSoft pages conditionally

    Here, PeopleCode sets the logic that determines when the JavaScript code will run. This is not as si ...

  10. Vue.js学习 Item6 -- Class 与 样式绑定

    数据绑定一个常见需求是操作元素的 class 列表和它的内联样式.因为它们都是 attribute,我们可以用 v-bind 处理它们:只需要计算出表达式最终的字符串.不过,字符串拼接麻烦又易错.因此 ...