1.类的继承

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

1.1 继承的特点

OC继承的语法

@interface SubClass :SuperClass
{
//成员变量定义
}
//方法定义部分

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

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

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的子类的实例
NSObject* hello = @"hello";
BOOL b1 = [hello isKindOfClass:[NSObject class]]
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等各种基本类型
NSNumber* num = [NSNumber numberWithInt:20];
NSNumber* de = [NSNumber numberWithDouble:3.4];
//NSLog(@"%d",[num intValue]);
NSLog(@"%g",[de doubleValue]);
NSNumber* ch = [[NSNumber alloc] initWithChar:'J'];
NSLog(@"%@",ch);

4.处理对象

4.1 打印对象和description方法

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

-(NSString *) description
{
return ........
}

4.2 == 和isEqual方法

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

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

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

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

5.类别与扩展

5.1 类别(category)

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

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

@interface 已有类(类别名)
//定义方法
...
@end @implementation 已有类(类别名)
//方法实现
...
@end

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

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

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

示例如下:

#import <Foundation/Foundation.h>

@interface FKItem:NSObject
@end @implementation FKItem
-(void) Console:(NSString*) msg
{
NSLog(@"%@",msg);
}
@end int main(int argc, char const *argv[])
{
@autoreleasepool{
FKItem* item = [[FKItem alloc] init];
[item Console:@"Objective-C"];
}
}

5.4 扩展(extension)

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

@interface 已有类()
{
实例变量
}
//方法定义
...
@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. (笔记)安装npm需要更改代理kneesocks 1081 1080

  2. Android IOS WebRTC 音视频开发总结(四三)-- 诚信交易案例分享

    本文主要记录一些诚信交易的案例(两个陌生人之间没有合同,没有订金,没有讨价还价,完全靠诚信完成的交易), 特别纪录下来并不是因为金额有多高,而是因为在现在这种社会要完成这样的交易太难,特别是像咨询这种 ...

  3. Android版年年有鱼游戏源码

    具体的功能如下: 欢迎动画界面 ,游戏运行后首先进入的界面. 菜单的选择,游戏中还需要设计出菜单界面,菜单界面是玩家对游戏的第一印象,菜单界面的美观与否,直接决定着游戏的成功与失败. 游戏的音效,游戏 ...

  4. PL/SQL Developer中文注释乱码的解决办法

    1.检查服务器编码: 执行SQL语法: select * from v$nls_parameters; 2.设置本地客户端编码: 进入 我的电脑,属性,高级,环境变量,添加2项:LANG=zh_CN. ...

  5. 使用notiy和wait模拟阻塞队列

    public class MyQueue { //定义一个存储数据的容器 private LinkedList<Object> list = new LinkedList<Objec ...

  6. 14 个折磨人的 JavaScript 面试题

    前端工程师有时候面试时会遇到一类面试官,他们问的问题对于语言本身非常较真儿,往往不是候选人可能期待的面向实际的问题(有些候选人强调能干活就行,至于知不知道其中缘由是无关痛痒的).这类题目,虽然没有逻辑 ...

  7. mariadb DML语句及用户授权

    DML(Data Manipulation Language):INSERT, DELETE, UPDATE, SELECT INSERT  [INTO]  tbl_name  [(col1,...) ...

  8. 瀑布流ListView

    前言 终于忙完了一段时间,现在前段时间写的一个瀑布流ListView到想法分享下,这个东西是扩展自Listview,当列表内容拉到最后后触发刷新操作,以便抓取更多到数据. 先贴下整个代码,先有个整体到 ...

  9. 第五章 管理程序流(In .net4.5) 之 异常处理

    1. 概述 本章包括.net4.5中异常处理相关的部分. 2. 主要内容 2.1 处理异常 ① try.cahtch.finally 机制,无需多言. ② 使用 Environment.FailFas ...

  10. XAML(4) - 标记扩展

    在为元素设置值时, 可以直接设置值, 但有时标记扩展非常有帮助.标记扩展包含花括号,其后是定义了标记扩展类型的字符串标志. 下面是一个Static Resource标记扩展: <Button N ...