标签:继承
------Android培训、iOS培训、Java培训,期待与您交流-----
一、继承的基本概念
继承是面向的三大特征之一,指的是在一个类的基础上,定义一个新类;原本的类成为父类(基类),新类称为子类(派生类)。
生活中,继承的例子也是数不胜数,比如一个儿子继承了他父亲,那么他就享受他父亲的财产了,当然不是全部,详细解释见下文。
再如,一个电器系列:
一层接着一层,电器为父类,下面的洗衣机、电脑、电视机都是电器的子类,下面的品牌名又是洗衣机、电脑、电视机的子类,当然也是电器的子类。
体现在代码中,继承的好处:
1)抽取了重复的代码
2)使类与类之间有关系可循
二、OC中的继承
1)特点
第一、子类拥有父类的属性和方法;
第二、子类可以有自己新的属性和方法;
第三、子类可以重写父类的方法;
第四、可以声明父类,创建子类。
2)好处
/* 1.继承的好处: 1> 抽取重复代码 2> 建立了类之间的关系 3> 子类可以拥有父类中的所有成员变量和方法 2.注意点 1> 基本上所有类的根类是NSObject */ /********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 /********Cat*******/ @interface Cat : Animal @end @implementation Cat @end
#import <Foundation/Foundation.h> int main() { Dog *d = [Dog new]; [d setAge:10]; NSLog(@"age=%d", [d age]); return 0; }
注意:
1> 父类必须声明在子类的前面
2> 子类不能拥有和父类相同的成员变量
3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找
代码示例:
#import <Foundation/Foundation.h> // Person @interface Person : NSObject { int _age; } - (void)setAge:(int)age; - (int)age; - (void)run; + (void)test; @end @implementation Person + (void)test { NSLog(@"Person+test"); } - (void)run { NSLog(@"person---跑"); } - (void)setAge:(int)age { _age = age; } - (int)age { return _age; } @end // 不允许子类和父类拥有相同名称的成员变量 // Student @interface Student : Person { int _no; // int _age; } + (void)test2; @end @implementation Student // 重写:子类重新实现父类中的某个方法,覆盖父类以前的做法 - (void)run { NSLog(@"student---跑"); } + (void)test2 { [self test]; } @end int main() { [Student test2]; // Student *s = [Student new]; // // [s run]; return 0; }
五、继承的使用场合
继承的使用场合
1> 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2> 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类
A { int _age; int _no; } B : A { int _weight; } // 继承:xx 是 xxx // 组合:xxx 拥有 xxx
继承 VS 组合:
A { int _age; int _no; } B { A *_a; int _weight; }
标签:继承
原文地址:http://blog.csdn.net/u010590318/article/details/41786551