Objective-C面向对象的编程
Objective-C面向对象的编程
目录
- 对面向对象编程思想的理解
- 类的声明和定义
类的声明和定义
对关键字super和self的理解
初始化函数
@property声明类成员
- 类的实例化
- 继承
- 组合
- 多态
- 编写自己的类库
数据处理的类库
UI类库
第三方类库
对面向对象编程思想的理解
我们往往习惯于使用面向过程的思想去思考问题,C语言是一种面向过程的语言,作为我们编程入门的语言是非常适合的,虽然面向过程的语言比较高效率,但是其对于编写一个庞大的程序来说是比较繁琐的,此时为了解决此问题,我们提出了面向对象编程的编程思想
面向对象的三大特性:封装、继承、多态
把具有相同特征和行为的一组对象封装到类里面,当有需要时,我们可以用类声明出新的对象,让新的对象去实现我们想要的功能
当类与类之间有一种父子关系时,我们可以使用继承,以免重新写一些累赘的方法
思考OC、C++面向对象多态性的实现方式有哪些
OC:继承、Protocol协议
C++:继承(单/多)、抽象类
类的声明和定义
类的声明和定义
声明:@interface 类名:父类名 { } @end
定义:@implement{ } @end
成员变量访问权限修饰符:@public、@protected(默认)、@private
成员方法和类方法:“-”修饰为成员方法,“+”修饰为类方法(类方法中不可以包含实例变量,否则直接报编译时错误)
当想要把成员方法暴露出来时,在@interface 类名:父类名 { } @end之间进行声明,则能够在类外部进行调用
静态变量的生成方法:不能在@interface 类名:父类名 { } @end之间对成员变量进行static修饰,需要在@implement @end实现文件中声明一个全局的静态变量,然后写这个静态变量的get方法和set方法供类外部进行调用,这样子就能达到生成静态变量的目的
当成员变量为对象时所需要注意的问题
注意
类的声明和定义两者缺一不可;
对关键字self和super的理解
self:指向所定义的类本身
super:指向定义的类的父类
初始化函数
默认的初始化函数
init
根据需求自定义初始化函数
不一定要调用父类的init函数(系统可能已经通过alloc分配了内存空间,此处仅仅是做初始化操作)
@property声明类成员
使用@property来声明类成员,编译预处理系统会根据@property的属性给类生成相对应的get方法和set方法,此时允许使用点语法来访问所声明的类成员
类的实例化
类名 *对象名 = [[类名 alloc] 初始化函数]/[类名 new];
注:Objective C类对象的声明都是声明其对象指针的
访问成员变量:对象名->成员变量名;
点语法:可以使用”.“来对成员变量进行get操作和set操作
成员方法的调用:[对象名 方法名];
继承
关键字
”:“
书写规范:@interface 类名:父类名{ } @end
继承的成员变量和成员函数
@public和@protected所修饰的成员变量,所派生的成员变量的修饰符和父类的修饰符相同,而且无法更改派生成员变量的修饰符
@property如果声明在.h文件,则其getter方法和setter方法都会继承到子类中
暴露在@interface{} @end之间的成员方法则可以被继承到子类
注意
Objective-C没有像C++一样可以对父类继承的声明符,因此如果是暴露在@interface{} @end之间的成员方法则可以被派生到子类,子类也可以把此方法派生到子类的子类并且不能对其做派生权限的更改,因此如果不确定有些方法是否要传给子类的子类则在Objective-C中使用Protocol协议
NSObject是任何类的直接或者间接父类
组合
类对象里面包括其他的类对象作为成员变量
需要注意问题:对象的引用
多态
相关概念
动态类型:OC在运行时才确定对象的实际类型
动态绑定:程序在执行时才确定对象调用的实际方法
多态
一种事物的多种状态。不同类的对象可以定义共享相同名称的方法,这个就是多态的表现形式
多态的条件
有继承关系,有方法重写,父类的声明变量指向子类对象
编写自己的类库
数据处理的类库
UI类库
第三方类库