您的位置:首页 > 移动开发 > Objective-C

初探Object-c 2 :类的继承,重载

2015-04-01 15:06 267 查看
在面向对象思想中,继承,重写和重载是非常关键的一个环节,在之前java的学习中,使用继承和重载可以避免在后续的开发中因为之前思考不严谨造成重复开发。在OC的学习中,决定重新温习一遍这种特性。

在面向对象中,子类通过继承父类可以获得父类的属性和方法。

继承

#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中,将在后面继续讨探抽象类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: