【Objective-C】07-OC对象的继承
2014-12-13 11:08
295 查看
1、继承的好处:
1.1 继承可以抽取重复的代码,减少代码量,提高代码的利用性
1.2 面向对象的多态就是基于继承
1.3 继承建立了类与类之间的关系
1.4 子类可以拥有父类中的所有成员变量和方法
1.5 当子类想要拥有和父类同名但是不一样的实现方式时,可以重写父类的方法,提高代码的灵活性
2、继承的声明
2.1 声明和实现父类方法 :@interface
Animal:NSObject @end
2.2 声明子类,并在声明子类后面继承父类:@interface Dog:Animal @end
3、方法的重写
3.1 子类重新实现父类的某个方法,覆盖父类以前的做法
3.2 父类必须声明在子类的前面
3.3 子类不能拥有和父类相同的成员变量
3.4 调用某个方法时,优先在当前类中找;如果找不到,再到父类中找
4、继承的坏处
4.1 类与类之前的偶合性太强
5、继承的使用场合(继承与组合)
5.1 继承表示的是A类属于B类,即A:B,或者A is B。当A是B的子集时,可以采用继承的方式。比如狗是动物的一种,Dog is Animal,即可声明为@interface Dog:Animal
5.2 当A类不是B类的子集时,但是B类又需要拥有A类的部分属性或方法,这时可以考虑使用组合的方式。组合表示的是B类拥有A类,即B has A。如学生类拥有成绩类,即可用组合的方式。具体做法为声明成绩类和学生类。在学生类中声明一个成绩类的成员变量,即表示学生类拥有成绩类了。
1.1 继承可以抽取重复的代码,减少代码量,提高代码的利用性
1.2 面向对象的多态就是基于继承
1.3 继承建立了类与类之间的关系
1.4 子类可以拥有父类中的所有成员变量和方法
1.5 当子类想要拥有和父类同名但是不一样的实现方式时,可以重写父类的方法,提高代码的灵活性
2、继承的声明
2.1 声明和实现父类方法 :@interface
Animal:NSObject @end
2.2 声明子类,并在声明子类后面继承父类:@interface Dog:Animal @end
3、方法的重写
3.1 子类重新实现父类的某个方法,覆盖父类以前的做法
3.2 父类必须声明在子类的前面
3.3 子类不能拥有和父类相同的成员变量
3.4 调用某个方法时,优先在当前类中找;如果找不到,再到父类中找
4、继承的坏处
4.1 类与类之前的偶合性太强
5、继承的使用场合(继承与组合)
5.1 继承表示的是A类属于B类,即A:B,或者A is B。当A是B的子集时,可以采用继承的方式。比如狗是动物的一种,Dog is Animal,即可声明为@interface Dog:Animal
5.2 当A类不是B类的子集时,但是B类又需要拥有A类的部分属性或方法,这时可以考虑使用组合的方式。组合表示的是B类拥有A类,即B has A。如学生类拥有成绩类,即可用组合的方式。具体做法为声明成绩类和学生类。在学生类中声明一个成绩类的成员变量,即表示学生类拥有成绩类了。
#import <Foundation/Foundation.h> @interface Animal:NSObject { int _age;//年龄 double _weight;//重量 } - (void)setAge:(int)age; - (int)age; - (void)setWeight:(double)weight; - (double)weight; //对象方法:跑 - (void)run; //类方法:test + (void)test; @end //Animal类的实现 @implementation Animal - (void)setAge:(int)age { _age=age; } - (int)age { return _age; } - (void)setWeight:(double)weight { _weight=weight; } - (double)weight { return _weight; } - (void)run { NSLog(@"Animal---跑"); } + (void)test { NSLog(@"Animal---+test"); } @end @interface Dog : Animal //子类不能拥有和父类相同名称的成员变量 //int _age; - (void)run; + (void)test2; @end @implementation Dog //重写父类方法:子类重新实现父类中的某个方法,覆盖父类以前的方法 - (void)run { NSLog(@"dog's running"); } /* //如果这一段没有注释的话,则下面的test2方法调用的是当前的test方法 + (void)test { NSLog(@"dog-----+test"); } */ + (void)test2 { //调用当前类的类方法,如果没有则到父类中查找test类方法 [self test]; } @end @interface Cat:Animal @end @implementation Cat @end int main() { Dog *d= [Dog new]; [d setAge:10]; NSLog(@"dog's age=%d",[d age]); //调用对象方法run [d run]; //调用类方法test2 [Dog test2]; return 0; }
相关文章推荐
- Objective-C中基本数据烦类型与对象数据类型相互转换的方法(OC中NSString的常用API的基础应用3)
- 【Objective-C】OC中对象创建,self,super的详解
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- 【Objective-C】05-OC对象中类方法和对象方法的比较
- 【Objective-C】04-OC对象成员变量的封装规范:get方法和set方法
- Objective-C 编程语言(2) 类,对象,消息 --- 类(1)继承
- 【Objective-C学习笔记】OC三大特性:封装、继承、多态
- 07-OC的对象方法
- 【《Objective-C基础教程 》笔记ch04】(五)OC中的继承inheritance机制
- 【Objective-C】08-OC对象的super关键字
- 【Objective-C】OC中对象创建,self,super的详解
- 【Objective-C】OC中引用计数和对象所有权的基本概念与用法
- 【Objective-C】OC中NSNumber数字对象的常用处理方法
- 黑马程序员-7-Objective-C学习笔记(OC对象深入认识)
- 【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)
- 【07】面对对象3_继承,super,函数覆盖,子类实例化,final,抽象,接口
- 【Objective-C】OC中NSNumber数字对象的常用处理方法
- 【Objective-C】OC中对象归档(序列化)的基本概念和用法
- 【Objective-C】02-OC对象作为参数传递给函数
- Objective-C 学习笔记 04 - 继承和对象的实例