【黑马程序员】---Objective-C面向对象知识总结
来源:互联网 发布:淘宝建盏可靠吗 编辑:程序博客网 时间:2024/06/15 01:59
Objective-C面向对象知识总结
OC是一门面向对象的语言,因此它也有类、对象、静态\动态方法、成员变量的概念
1.类
在oc中,一般有两个文件来描述一个类
(1).h:类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end。
(2).m:类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation和@end。
(3 + 表示类方法(静态方法 - 表示对象方法(动态方法)。
(4)oc的成员变量定义跟其它编程语言类似,(实例变量\成员变量,默认会初始化为0)
@interface Car : NSObject{ // @public可以让外部的指针间接访问对象内部的成员变量 @public int wheels; // 轮胎个数 int speed; // 时速(xxkm/h)}// 方法(行为):方法名、参数、返回值(声明、实现)// 只要是OC对象的方法,必须以减号 - 开头- (void)run;@end
// 2.类的实现// 用来实现@inteface中声明的方法@implementation Car// 方法的实现(说清楚方法里面有什么代码)- (void)run{ NSLog(@"车子跑起来了");}@end
int main(){ // 在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称] // 利用类来创建对象 // 执行了Car这个类的new行为来创建新对象 // 定义了一个指针变量p,p将来指向的是Car类型的对象 // [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址) Car *p = [Car new]; Car *p2 = [Car new]; p2->wheels = 5; p2->speed = 300; [p2 run]; // 给p所指向对象的wheels属性赋值 p->wheels = 4; p->speed = 250; // 给p所指向对象发送一条run消息 [p run]; NSLog(@"车子有%d个轮子,时速位:%dkm/h", p->wheels, p2->speed); return 0;}心得体会:
(1).h中的方法只是做一个声明,并不对方法进行实现。也就是说,只是说明一下方法名、方法的返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。
(2)类名的第一个字母必须是大写,不能有下划线
(3)实例变量\成员变量,默认会初始化为0
(4)OC方法中任何数据类型都必须用小括号()括住
(5)默认情况下,实例变量都是protected类型,在.h中声明的所有方法作用域都是public类型,不能更改。
(6)oc中调用方法的形式[行为的执行者 行为名称]。
(7)可以用指向类类型的对象的指针变量访问实例变量,比如p->speed。
(8)在声明实例变量的时候不能对实例变量进行初始化。
2.oc对象跟函数
注意方法跟函数的区别
@implementation Car- (void)run{ NSLog(@"%d个轮子,速度为%dkm/h的车子跑起来", wheels, speed);}@endvoid test(int w, int s){ w = 20; s = 200;}心得体会:
(1)对象方法的声明必须写在@interface和@end之间,对象方法的实现必须写在@implementation和@end之间
(2)函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有
(3)对象方法只能由对象来调用,对象方法归类\对象所有
(4)函数内部不能直接通过成员变量名访问某个对象的成员变量
(5)不能随便将成员变量当做C语言中的变量来使用
其它知识点:
// 设计一个方法,用来和其他车比较车速,返回车速的差距#import <Foundation/Foundation.h>@interface Car : NSObject{ @public int speed;}- (int)compareSpeedWithOther:(Car *)other;@end@implementation Car- (int)compareSpeedWithOther:(Car *)other{ // speed // other->speed // 返回当前这辆车和other这辆车的速度差距 return speed - other->speed;}@end(1)注意函数的名称。
(2)函数参数前面加冒号:。
类方法
1> 加号 + 开头
2> 只能由类(名)来调用
3> 类方法中不能访问成员变量(实例变量)
// 类方法都是以+开头+ (void)printClassName;心得体会:
(1)当方法内部不需要使用到成员变量时,就可以改为类方法
(2) 可以允许类方法和对象方法同名
3.匿名对象
[Car new]->speed = 300; [[Car new] run];<span style="color:#ff0000;">Car *c = [Car new];</span>心得体会:
(1)匿名对象每一次[Car new],都会在内存新开辟一段存储空间。每一个[Car new ]对象都不同。
(2)只要求能说出输出结果, 不要写类似匿名对象这样的代码
4.封装
隐藏内部实现,稳定外部接口.
(1) set方法, 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
(2) get方法,返回对象内部的成员变量
@interface Student : NSObject{ int _no; Sex _sex;}// sex的set和get方法- (void)setSex:(Sex)sex;- (Sex)sex;// no的set和get方法- (void)setNo:(int)no;- (int)no;@end心得体会:
(1)方法名必须以set开头, set后面跟上成员变量的名称,成员变量的首字母必须大写,形参的名称不能跟成员变量名一样
(2)get方法肯定有返回值,返回值类型肯定与成员变量类型一致
(3)成员变量的命名规范:一定要以下划线 _ 开头
5.继承
子类继承父类,子类可以直接复用父类中的成员.子类继承父类所有方法的声明和实现。
@interface Animal : NSObject{ int _age;}- (void)setAge:(int)age;- (int)age;@end
@interface Cat : Animal@end@implementation Cat@end心得体会:
(1)子类可以拥有父类中的所有成员变量和方法
(2)基本上所有类的根类是NSObject
(3)当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
(4) /继承:xx 是 xxx 组合:xxx 拥有 xxx
重写:子类重新实现父类中的某个方法,覆盖父类以前的做法
1> 父类必须声明在子类的前面
2> 子类不能拥有和父类相同的成员变量
3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找
6.多态
父类类型的指针指向子类对象
void feed(Dog *d){ [d eat];}void feed2(Cat *c){ [c eat];}// 如果参数中使用的是父类类型,可以传入父类、子类对象void feed(Animal *a){ [a eat];}心得体会:
(1)如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
(2)父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法
(3)编译看左,运行看右,调用方法时会检测对象的真实形象
7.self和super
self:(1)谁调用了当前方法,self就代表谁-------如果self出现在对象方法中,就代表当前对象;如果self出现在类方法中,就代表当前类。
(2)self支持赋值操作,也可以被用作返回值,例如:"Car *c = self" 和 ""return self"
(3)通过self可以调用类的实例变量和方法,例如:"self->成员变量名" 和 “ [self 方法名]”。
super:
(1)super只能被用于调用父类的方法。-------super处在对象方法中,那么就会调用父类的对象方法,super处在类方法中,那么就会调用父类的类方法
(2)不能通过super完成赋值,也不能把方法的返回值指定为super。
- 【黑马程序员】---Objective-C面向对象知识总结
- 黑马程序员-面向对象知识总结
- 黑马程序员_面向对象知识总结
- 黑马程序员—面向对象知识总结
- 黑马程序员——Objective-C语言知识点总结之面向对象
- 黑马程序员--Objective-C——面向对象
- 黑马程序员--Objective-C语言基础知识--面向对象
- 黑马程序员--iOS--Objective-C基础 (面向对象)
- 黑马程序员_C#面向对象学习知识总结1
- 黑马程序员_C#面向对象学习知识总结2
- 黑马程序员_C#面向对象知识总结3
- 黑马程序员—面向对象知识总结(二)
- 黑马程序员——Objective-C语言知识整理——Objective-C语言基础知识总结
- 黑马程序员 面向对象总结
- 黑马程序员-面向对象总结
- 黑马程序员-面向对象总结
- 【黑马程序员】面向对象总结
- 黑马程序员——Objective-C语言知识整理——构造方法相关知识总结
- POJ 3368 Frequent values(RMQ)
- 点云txt文件—>pcd文件
- LeetCode-Pow(x, n)
- JavaScript对象引用
- js for循环 setTimeout与setInterval测试
- 【黑马程序员】---Objective-C面向对象知识总结
- boost asio编程笔记
- 安卓的动画效果
- 参数 sync_binlog、innodb_support_xa、innodb_flush_log_at_trx_commit
- 阿里巴巴安全部道哥、云舒3月10日在北邮讲座小记
- Pow(x, n)
- 对weak的理解
- Android MTP 转载http://www.cnblogs.com/skywang12345/p/3474206.html
- Linux的bg和fg命令