黑马程序员—03OC三大特征
来源:互联网 发布:js中获取json对象的值 编辑:程序博客网 时间:2024/06/07 17:23
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、继承
1> 继承定义
继承 :假如已经定义一个类,而另外一个类有这个类的所有成员变量和方法,并且,这两个类的关系是从属关系,比方说:动物->狗;动物->人类->学生->小学生,因为狗有动物的属性和方法,所以狗可以继承动物,小学生有学生的属性和方法,学生有人类的属性和方法,人类有动物的属性和方法,所以小学生可以继承学生可以继承人类可以继承动物。
2> 重写、组合
* 重写 :子类继承了父类,如果,父类的某些方法对于子类不太合适,那么,子类就可以用父类同样的方法名称再实现一个适合自己的方法,就这样子类覆盖父类的方法,这就是重写,在方法调用中,优先调用子类的方法,然后是父类,以此类推。
* 组合 :与继承情况类似,假如已知一个类,如果另外一个类有这个类的所有的成员变量和方法,但是,这两个类又不是从属关系,仅仅是包含而已,比方说:成绩单和学生信息,学生信息里包括成绩单,但是成绩单并不是学生的子类。那么这种场合用组合。
3> 举例
继承的实例 :
/********Animal的声明*******/@interface Animal : NSObject{ int _age; double _weight;}- (void)setAge:(int)age;- (int)age;- (void)setWeight:(double)weight;- (double)weight;@end/********Animal的实现*******/@implementation Animal- (void)setAge:(int)age{ _age = age;}- (int)age{ return _age;}- (void)setWeight:(double)weight{ _weight = weight;}- (double)weight{ return _weight;}@end/********Dog*******/// : Animal 继承了Animal,相当于拥有了Animal里面的所有成员变量和方法// Animal称为Dog的父类// Dog称为Animal的子类@interface Dog : Animal@end@implementation Dog@end</span>
重写的实例 :
@interface Person : NSObject{ int _age;}- (void)run;@end@implementation Person- (void)run{ NSLog(@"person---跑");}@end@interface Student : Person@end@implementation Student// 重写:子类重新实现父类中的某个方法,覆盖父类以前的做法- (void)run{ NSLog(@"student---跑");}@end
组合的实例 :
@interface Score : NSObject{ int _cScore; int _ocScore;}@end@implementation Score@end@interface Student : NSObject{ // 组合 Score *_score;// int _cScore;// int _ocScore; int _age;}@end@implementation Student@end</span>
4> 总结
继承的好处 :
* 抽取重复代码。
* 建立了类之间的关系。
* 子类可以拥有父类中的所有成员变量和方法。
继承的局限性 :
* 耦合性。
注意点 :
* 基本上所有类的根类是NSObject。
* 不允许子类和父类拥有相同名称的成员变量。
继承的使用场合 :
* 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中。
* 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类。
Super :
* 概念 :在子类中重写方法时,可以让调用者跳过这一层而调用父类中的方法。
* 作用 :直接调用父类中的某一个方法;Super处在对象方法中,那么就会调用父类的对象方法。
* 使用场景:子类在重写父类方法时,想要保留父类的一些行为。
二、封装
1> 定义
封装是对象和类概念的主要特性。它是隐藏内部实现,稳定外部接口,可以看作是“包装”。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
2> 两个典型的类方法
* set方法 :为了设置成员变量的值,我们需要提供一个方法给外界,让外界设置成员变量的值,可以对方法里的参数进行过滤。
* get方法 :为了返回对象内部的成员变量,我们需要提供一个方法给外界,用来返回对象内部的成员变量。
3> 举例
@interface Person :NSObject{int _age;}- (void)setAge :(int)newAge; // set方法的声明- (int)age; // get方法的声明@end@implementation Person- (void)setAge :(int)newAge // set方法的实现{newAge = _age;}- (int)age // get方法的实现{return _age;}@end
4> 总结
封装的好处:使用更加简单,变量更加安全,可以隐藏内部实现细节,开发速度加快。
继承的实现 :在接口中使用符号“:”,例如
注意:属性封装了实例变量,方法封装了具体的实现代码, 类封装了属性和方法。子类可以继承父类中的方法,还可以重写(override)父类的方法。
类方法
* 加号 + 开头
* 只能由类(名)来调用
* 类方法中不能访问成员变量(实例变量)类方法的好处:不依赖于对象,执行效率高类方法的。
* 可以允许类方法和对象方法同名,当使用类调用方法时,会调用带+号的该方法;而使用对象调用方法时,会调用带-号的方法。
使用场合:能用类方法,尽量用类方法。当方法内部不需要使用到成员变量时,就可以改为类方法。
Self的用途:
* Self是一个指针,谁调用了当前方法,self就指向谁。(出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类)
* [self 方法名];可以调用其他的对象方法或者是类方法。
* 可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)
当然啦,使用self应当注意,小心发生下面的死循环!!
(void)test{ NSLog(@"调用了-test方法"); // 会引发死循环 //[self test];}+ (void)test{ NSLog(@"调用了+test方法"); // 会引发死循环 //[self test];}
三、多态
1> 多态
* 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。
* 在使用多态是,会进行动态检测,以调用真实的对象方法。
* 多态在代码中的体现即父类指针指向子类对象。
2> 多态的局限性
* 父类类型的变量不能直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法/父类指针可以指向子类对象。
3> 举例
Animal *c = [Cat new];NSObject *n = [Dog new];NSObject *n2 = [Animal new];Dog *d = [Dog new]; // Dog类型Animal *a = [Dog new];//多态:父类指针指向子类对象[a eat];//调用方法时会检测对象的真实形象下面是利用多态创建字符串,感受一下:
#import <Foundation/Foundation.h>int main(){ // 最简单的创建字符串的方式 NSString *str = @"itcast"; // length方法算的是字数 int size = [str length]; NSLog(@"%d", size);//输出str的长度 // 创建OC字符串的另一种方式 NSString *newStr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@", 23, 666, str]; NSLog(@"---- %ld", [newStr length]); return 0;}
4> 总结
* 没有继承就没有多态
* 代码的体现:父类类型的指针指向子类对象
* 好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。
* 局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。
- 黑马程序员—03OC三大特征
- 黑马程序员----OC三大特征
- 黑马程序员--OC基础--面向对象三大特征
- 黑马程序员——OC基础——面向对象的三大特征(二)
- 黑马程序员————OC面向对象三大特征总结
- 黑马程序员--OC面向对象的三大特征——封装、继承、多态
- 黑马程序员——OC笔记之面向对象三大特征(封装、继承、多态)
- 黑马程序员————oc三大特性
- 黑马程序员—OC—三大特性
- 黑马程序员——OC三大特性之封装
- 黑马程序员——OC基础三大特性
- 黑马程序员——OC语言三大特性
- 黑马程序员——02OC三大特性
- 黑马程序员——OC三大特性-5:封装
- 黑马程序员——OC三大特性-6:继承
- 黑马程序员——OC三大特性-7:多态
- 黑马程序员—OC之三大特性
- 黑马程序员—OC语言面向对象三大特性
- 【Android开发经验】ViewHolder到底用什么修饰?static?final?static final?
- HTML本地存储之IndexedDB(1)
- Redis 集群方案
- 【Android开发经验】Android相关问题的好文章整理
- IOS代码快速注释插件
- 黑马程序员—03OC三大特征
- UILabel自适应宽度
- [leetcode] 学习记录——Factorial Trailing Zeroes
- 比较简单的导出EXCEL
- 黑马程序员—04OC核心语法_01
- Android Context 上下文 你必须知道的一切
- simple add
- cocos2d-x 游戏开发之有限状态机(FSM) (三)
- Struts2 XML配置详解