初探Object-c 2 :类的继承,重载
2015-04-01 15:06
267 查看
在面向对象思想中,继承,重写和重载是非常关键的一个环节,在之前java的学习中,使用继承和重载可以避免在后续的开发中因为之前思考不严谨造成重复开发。在OC的学习中,决定重新温习一遍这种特性。
在面向对象中,子类通过继承父类可以获得父类的属性和方法。
其中,在person类中定义了一个write方法。
再定义一个student类
下面是测试
输出:
2014-04-05 13:25:30.990 ObjectCApress[1659:303] 43
2014-04-05 13:25:30.992 ObjectCApress[1659:303] Person 对象调用write方法
2014-04-05 13:25:30.993 ObjectCApress[1659:303] Student 调用eat方法
2014-04-05 13:25:30.994 ObjectCApress[1659:303] 99
2014-04-05 13:25:30.995 ObjectCApress[1659:303] Person 对象调用write方法
可见student类继承了person类的write方法
1、 重载定义:派生类继承父类方法时,该方法具有相同的返回类型,并且参数的数目与重载的方法相同,即对父类同名函数进行重写。
对write方法进行了重写,可以看到,如果调用的是student中的write方法,输出信息将会显示出来。
输出
2014-04-05 13:36:21.055 ObjectCApress[1698:303] Student 调用eat方法
2014-04-05 13:36:21.058 ObjectCApress[1698:303] 调用Student的Write方法
在子类重载了方法以后,如果子类想调用父类的方法,可以使用super关键字来调用父类的方法。
在面向对象中,子类通过继承父类可以获得父类的属性和方法。
继承
#import <Foundation/Foundation.h> @interface Person : NSObject{ NSString *name; int age; NSArray *itmes; } @property (nonatomic,retain) NSString *name; @property (nonatomic,assign) int age; @property (nonatomic,retain) NSArray *itmes; -(void) write; @end Person类的定义
其中,在person类中定义了一个write方法。
再定义一个student类
#import <Foundation/Foundation.h> #import "Person.h" @interface Student : Person{ NSString *address; } @property (nonatomic,retain) NSString *address; -(void) eat; @end ------------------------------------------------------------------- #import "Student.h" @implementation Student @synthesize address; -(void) eat{ NSLog(@"Student 调用eat方法"); } @end Student类
下面是测试
Person *person=[[Person alloc] init]; person.age=43; [person write]; Student *student=[[Student alloc] init]; student.address=@"上海"; student.age=99; [student eat]; [student write]; 测试代码
输出:
2014-04-05 13:25:30.990 ObjectCApress[1659:303] 43
2014-04-05 13:25:30.992 ObjectCApress[1659:303] Person 对象调用write方法
2014-04-05 13:25:30.993 ObjectCApress[1659:303] Student 调用eat方法
2014-04-05 13:25:30.994 ObjectCApress[1659:303] 99
2014-04-05 13:25:30.995 ObjectCApress[1659:303] Person 对象调用write方法
可见student类继承了person类的write方法
重载
子类通过继承可以使用父类的方法,但如果子类需要对方法进行不同操作,需要对继承的方法进行重写。1、 重载定义:派生类继承父类方法时,该方法具有相同的返回类型,并且参数的数目与重载的方法相同,即对父类同名函数进行重写。
#import <Foundation/Foundation.h> #import "Person.h" @interface Student : Person{ NSString *address; } @property (nonatomic,retain) NSString *address; -(void) eat; @end ------------------------------------------------- #import "Student.h" @implementation Student @synthesize address; -(void) eat{ NSLog(@"Student 调用eat方法"); } -(void) write{ NSLog(@"调用Student的Write方法"); } @end 重写父类方法
对write方法进行了重写,可以看到,如果调用的是student中的write方法,输出信息将会显示出来。
Student *student=[[Student alloc] init]; student.address=@"上海"; student.age=99; [student eat]; [student write];
输出
2014-04-05 13:36:21.055 ObjectCApress[1698:303] Student 调用eat方法
2014-04-05 13:36:21.058 ObjectCApress[1698:303] 调用Student的Write方法
在子类重载了方法以后,如果子类想调用父类的方法,可以使用super关键字来调用父类的方法。
抽象类
有些时候,我们需要创建一些类来让我们更好的来创建子类。因为此,这些类称为抽象类。这些类不考虑去创造相关的实例。在java中,抽象类(接口)都不可创造事例。在OC中,将在后面继续讨探抽象类。相关文章推荐
- Object-C 继承.重写.重载
- [翻译]并非一切类型都继承源自object
- java封装 继承 多态 重写 重载
- 谈C++继承中的重载、覆盖和隐藏
- .Net AOP(三)继承ContextBoundObject方式
- JAVA面试题解惑系列(九)——继承、多态、重载和重写
- 继承中的重载以及构造函数与虚函数
- 虚函数,重载,继承叠加产生的问题
- 杰神之Java代码块和方法的继承(方法重载和方法重写)
- javascript 面向对象,实现namespace,class,继承,重载
- (转)C++继承中的重载、覆盖和隐藏
- [Java]重载,重写以及继承,多态的区别
- java_封装、继承、Object、多态
- object-c 继承、多态动态绑定 第八天
- 类的继承/方法重写/重载
- 重载,继承,重写和多态的区别
- 值类型与引用类型都隐式继承object类。
- 关联,组合和聚集,依赖,继承。多态与重载的区别
- object-c中类的继承
- Java中覆盖、继承、重载和多态的详细解说与this和super的用法