黑马程序员——三大特性之继承和多态
2014-09-21 13:05
239 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
**继承:
建立两个类:一个狗 一个猫,属性相同。 继承以后 狗和猫都同时拥有了Animal的属性和方法
继承的好处:
1、抽取重复代码
2、建立了类之间的关系
3、子类可以拥有父类中的所有成员变量和方法
注意点:
1、基本上所有类都继承NSObiect 这个基本类
2、不允许子类和父类拥有相同名称的成员变量
3、父类必须“声明”在子类前面(实现可以在后) 。
4、子类可以“重写”实现父类中的某个方法,调用时遵循就近原则。(可以有一样的方法名。而且父类中只有声明,子类来实现也可以)
5、耦合性太强,相互依赖型强。
继承的使用场合:
1、当两个类拥有相同属性和方法时,就可以将相同的东西抽取到一个父类中。
2、当A类拥有B类部分属性和方法时,可以考虑让B类继承A类。两个是同一类的才考虑继承。如果不是同一类可以考虑组合,如下:
如果一个类想拥有另一个类的属性方法,可以考虑继承和组合
继承:xxx是xxx 例,学生是人
组合:xxx拥有xxx 学生拥有成绩
组合
继承的关键字:super
[super 方法名];
1、调用父类中的某一方法
2、如果super处在对象方法中,就调用父类的对象方法。
如果super处在类方法中,那么就调用父类的类方法
使用场合:子类重写父类方法时,想保留父类的一些行为
父类:僵尸 子类:跳跃僵尸、铁通僵尸、舞王僵尸
多态:多种形态
1、没有继承就没有多态
2、代码的体现:父类类型的指针指向子类对象
3、好处:如果函数/方法参数中使用的是父类类型,可传入子类类型、父类类型的对象
4、局限性:父类类型的变量不能直接调用子类特有的方法。要是想调用必须强制转为子类类型变量后,才能直接调用。
例如:
#import <Foundation/Foundation.h>
@interface Animal : NSObject
- (void)eat;
@implementation Animal
- (void)eat
{
NSLog(@"吃吃吃");
}
@end
@interface Dog : Animal
@end
@implementation Dog
- (void)eat
{
NSLog(@"狗吃吃吃");
}
@end
void feed(Animal *a)
int mian()
{
Dog *d = [Dog new]; // Dog型
// 多态。父类指针指向子类对象.。也是dog型,和上面的一行一样作用
**继承:
建立两个类:一个狗 一个猫,属性相同。 继承以后 狗和猫都同时拥有了Animal的属性和方法
// animal类的建立 #import <Foundation/Foundation.h> @interface Animal : NSObject { int _age; double _weight; } - (void)setAge:(int)age; - (int)age; - (void)setWeight:(double)weight; - (double)weight; @end @implementation Animal - (void)setAge:(int)age { _age = age; } - (int)age { return _age; } - (void)setWeight:(double)weight { _weight = weight; } - (double)weight { return _weight; } @end
// 狗类的建立 @interface Dog : Animal /*这个冒号后就是继承 冒号要是英文的 NSObjict就是一个类。Animal成为dog和cat的父类 dog<span style="white-space:pre"> </span>和cat是Animal的子类。*/ @end @implementation Dog @end // 猫类的建立 @interface Cat : Animal @end @implementation Cat @end int main() { Dog *d = [Dog new]; //new 也是一个类方法 他是存在于NSObiect中的。 [d setAge:10]; NSLog(@"age = %d", [d age]); return 0; }
继承的好处:
1、抽取重复代码
2、建立了类之间的关系
3、子类可以拥有父类中的所有成员变量和方法
注意点:
1、基本上所有类都继承NSObiect 这个基本类
2、不允许子类和父类拥有相同名称的成员变量
3、父类必须“声明”在子类前面(实现可以在后) 。
4、子类可以“重写”实现父类中的某个方法,调用时遵循就近原则。(可以有一样的方法名。而且父类中只有声明,子类来实现也可以)
5、耦合性太强,相互依赖型强。
继承的使用场合:
1、当两个类拥有相同属性和方法时,就可以将相同的东西抽取到一个父类中。
2、当A类拥有B类部分属性和方法时,可以考虑让B类继承A类。两个是同一类的才考虑继承。如果不是同一类可以考虑组合,如下:
如果一个类想拥有另一个类的属性方法,可以考虑继承和组合
继承:xxx是xxx 例,学生是人
组合:xxx拥有xxx 学生拥有成绩
组合
@interface Score : NSObiect { int _cScore; int _ocScore; } @end @implementation Score @end @interface Student : NSObject { Score *_score; // 学生拥有了成绩 int _age; } @end @implementation Student @end
继承的关键字:super
[super 方法名];
1、调用父类中的某一方法
2、如果super处在对象方法中,就调用父类的对象方法。
如果super处在类方法中,那么就调用父类的类方法
使用场合:子类重写父类方法时,想保留父类的一些行为
父类:僵尸 子类:跳跃僵尸、铁通僵尸、舞王僵尸
<span style="font-size:18px;">#import <Foundation/Foundation.h> @interface Zoobie : NSObject - (void)walk; @end @implementation Student - (void)walk { NSLog(@"向前走两步"); } @end @interface JumpZoobie : Zoobie @end @implementation Student - (void)walk // 因为跳跃僵尸的走和普通僵尸不一样,所以重写 { NSLog(@"跳两下"); NSLog(@"向前走两步");</span>
<span style="font-size:18px;">/* 也可以用父类方法代替,但[self walk];是调用自己的方法,所以用[super walk];调用父类的方法,用[super walk];代替这一句代码。。super调用类方法也是这样。*/ } @end int main() { JumpZoobie *jz = [JumpZoobie new]; [jz walk]; return 0; }</span><span style="font-size:24px;"> </span>
多态:多种形态
1、没有继承就没有多态
2、代码的体现:父类类型的指针指向子类对象
3、好处:如果函数/方法参数中使用的是父类类型,可传入子类类型、父类类型的对象
4、局限性:父类类型的变量不能直接调用子类特有的方法。要是想调用必须强制转为子类类型变量后,才能直接调用。
例如:
#import <Foundation/Foundation.h>
@interface Animal : NSObject
- (void)eat;
@implementation Animal
- (void)eat
{
NSLog(@"吃吃吃");
}
@end
@interface Dog : Animal
@end
@implementation Dog
- (void)eat
{
NSLog(@"狗吃吃吃");
}
@end
void feed(Animal *a)
int mian()
{
Dog *d = [Dog new]; // Dog型
// 多态。父类指针指向子类对象.。也是dog型,和上面的一行一样作用
Animal *a = [Dog new]; // 父类指针一般不能用来调用子类方法 [a eat]; // 输出是“狗吃吃吃” Dog *d = (Dog *)a; // 强制转换类型。 [d run];
// 如果要猫吃、狗也吃则可以这样 feed(d); Cat *c = [Cat new]; feed(c); <span style="white-space:pre"> </span>// 这就是多态的好处,如果不这样写,就要定义两个函数分别表示猫狗吃 return 0; } @interface Cat : Animal @end @implementation Cat - (void)eat { NSLog(@"猫吃吃吃"); } @end void feed(Animal *a) { [a eat]; }
相关文章推荐
- 黑马程序员_OC语言之面向对象的三大特性(封装、继承、多态)
- 黑马程序员关于面象对象以及它的三大特性:封装 继承 多态
- 黑马程序员—IOS基础之OC—类的三大特性封装、继承、多态
- 黑马程序员——OC语言基础:面向对象三大特性,封装、继承、多态
- 黑马程序员 《ios零基础教程》--“三大特性”-封装、继承、多态 2014-4-22总结
- 黑马程序员--OC的三大特性 封装 继承 多态
- 黑马程序员-OC之面向对象的三大特性:封装、继承和多态
- 黑马程序员——OC面向对象三大特性——封装,继承,多态。
- 黑马程序员——OC面向对象三大特性——封装,继承,多态。
- 黑马程序员-OC的三大特性:封装、继承、多态
- 黑马程序员——OC语言学习——OC面向对象的三大特性:封装、继承、多态,OC字符串——NSString
- 黑马程序员--类的三大特性(多态、继承、封装)
- 黑马程序员——OC篇(二)面向对象的三大特性(封装、继承、多态)
- 黑马程序员————OC面向对象_三大特性之继承与多态
- 黑马程序员_iOS开发之OC之面向对象之三大特性封装、继承和多态
- 黑马程序员——OC的三大特性:封装,继承,多态
- 黑马程序员-④面向对象三大特性封装、继承、多态
- 黑马程序员---OC面向对象三大特性(封装、继承、多态)
- 黑马程序员---java基础之面向对象(一)三大特征(封装,继承,多态)
- 黑马程序员-面向对象三大原则——封装、继承、多态