黑马程序员 _7 OC基础 继承、多态、分类
2014-04-02 21:02
204 查看
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流!
----------------------
一、继承
1.当两个类具有公共属性和行为时,可以抽出一个父类,类似Bird 和Dog都是动物,如下
子类将会继承父类所有的属性和方法,子类还可以重写父类方法,因为子类访问过程是先访问子类有没有,如果子类没有就去访问父类,
子类不能与父类有相同的成员变量。
利用super可以调用父类的对象方法和类方法。父类被继承后仍然可以正常使用。
2.继承的好处:
继承像是将类之间的联系了起来,减少了代码的不必要的书写。但坏处就是耦合性强。
3.super的作用
直接调用父类中的某个方法
super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
父类中的test类方法
3.使用场合:子类重写父类的方法时想保留父类的一些行为
二、多态
没有继承就没有多态,没有多态就没有类丰富的变化。
多态展示了事物的多种形态,OC对象具有多态性。
如:
注意:如果子类在左边,父类在右边会报错,因为调用方法时会检测对象的真实形象
三 OC中的字符串使用
OC中的字符串最简单的创建方式
四、分类
利用Cateagory分类可以给系统自带类扩充自己需要的方法,格式如下
类文件可以让多个人共同开发,实现团队合作。
注意:Category只能添加方法,不能添加变量。多个Category中实现了同名方法,只有最后一个参与编译的会生效,类似会覆盖的效果。
补充:类文件是类的补充扩展..并不是单独的类,所以不能定义新的变量,所以它不能初始化对象.
四、 +load和+initialize
1.+load 程序其董事会自动加载,不管有没有调用这个类。
2.+initialize当某个类被调用时,会自动调用+initialize方法,一个类只会调用一次。先调用父类,在调用子类.
如:
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流!
----------------------
----------------------
一、继承
1.当两个类具有公共属性和行为时,可以抽出一个父类,类似Bird 和Dog都是动物,如下
@interface Bird : NSObject { @public int weight; } - (void)eat; @end @interface Bird : NSObject { @public int weight; } - (void)eat; @endDog类似,可以先定义一个父类Animal,就像
@interface Animal : NSObject { @public int weight; } - (void)eat; @end // Animal的定义 @implementation Animal - (void)eat ; @end定义子类时:只需将NSObject替换为相应父类。
子类将会继承父类所有的属性和方法,子类还可以重写父类方法,因为子类访问过程是先访问子类有没有,如果子类没有就去访问父类,
子类不能与父类有相同的成员变量。
利用super可以调用父类的对象方法和类方法。父类被继承后仍然可以正常使用。
2.继承的好处:
继承像是将类之间的联系了起来,减少了代码的不必要的书写。但坏处就是耦合性强。
3.super的作用
直接调用父类中的某个方法
super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
父类中的test类方法
+ (void)test { NSLog(@"Zoombie+test");子类调用的super使用方式
+ (void)haha { [super test]; }
3.使用场合:子类重写父类的方法时想保留父类的一些行为
二、多态
没有继承就没有多态,没有多态就没有类丰富的变化。
多态展示了事物的多种形态,OC对象具有多态性。
如:
Person *p = [Student new]; p->age = 100; [p walk];Person是Student的父类,多态两边的类就是指不是同一类,将子类的对象赋值给父类指针,但是该对象必须子类父类共有,不能是子类特有的对象,这样父类的指针*p访问的会是子类的属性和方法,节省了代码,但是不具有子类特有的方法属性。
注意:如果子类在左边,父类在右边会报错,因为调用方法时会检测对象的真实形象
三 OC中的字符串使用
OC中的字符串最简单的创建方式
NSString *str = @"itcast"; char *name = "itcast"; NSLog(@"我在%@上课", str); NSLog(@"%s", name);
四、分类
利用Cateagory分类可以给系统自带类扩充自己需要的方法,格式如下
@interface 类名 (分类名称) // 方法声明 @end 分类的实现 @implementation 类名 (分类名称) // 方法实现 @end
类文件可以让多个人共同开发,实现团队合作。
注意:Category只能添加方法,不能添加变量。多个Category中实现了同名方法,只有最后一个参与编译的会生效,类似会覆盖的效果。
补充:类文件是类的补充扩展..并不是单独的类,所以不能定义新的变量,所以它不能初始化对象.
四、 +load和+initialize
1.+load 程序其董事会自动加载,不管有没有调用这个类。
2.+initialize当某个类被调用时,会自动调用+initialize方法,一个类只会调用一次。先调用父类,在调用子类.
如:
// 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法 + (void)load { NSLog(@"Person---load"); } // 当第一次使用这个类的时候,就会调用一次+initialize方法 + (void)initialize { NSLog(@"Person-initialize"); } @end
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流!
----------------------
相关文章推荐
- 黑马程序员 第17天 final 抽象类 模版方法模式 接口
- 程序员:选择效率,还是选择质量?
- 记录一下我的腾讯和百度两次面试经历
- 找准位置:初级程序员所需的知识 && 高级程序员所需的知识
- 唯美的程序员表白
- 阿里巴巴面试题汇总
- 腾讯实习生面试经历
- 黑马程序员_单例模式
- 话说程序员的职业生涯
- Java语法面试题一
- 腾讯一面,发现自己就是个渣渣
- 华为实习面试总结
- 程序员创业,千万别创成外包
- 黑马程序员-头痛的JVM堆栈理解!!
- 黑马程序员-java内存分配的策略
- 黑马程序员-关于SOA面向服务的体系结构
- 黑马程序员-线程池
- 黑马程序员——IOS基础——OC面向对象六分类
- 游戏策划面试作品问题
- java面试题good and gbc