您的位置:首页 > 其它

oc继承

2015-11-17 18:23 309 查看



博客分类:

类的继承是oop中的基本原则,下面就来分析一下oc的类和继承

在实现继承出现了子类的.m文件报错 mission@end 导致程序没发编译,最后发现是.h中少了一个@end

父类 TestExtends.h文件

Oc代码


@interface TestExtends: NSObject{

NSString* name;

}

@property NSString *name; //类似set和get方法

//@property name;

-(void)setName:(NSString*)newName;//定义方法

-(id)initWithC:(NSString*)newName;//定义构造方法

@end

#endif /* TestExtends_h */

TestExtends.m文件


伦理片 http://www.dotdy.com/

Oc代码

#import <Foundation/Foundation.h>

#import "TestExtends.h"

@implementation TestExtends

@synthesize name;

-(void)setName:(NSString*)newName{

NSLog(@"调用父类的setName方法");

}

-(id)initWithC:(NSString *)newName{

if (self==[super init]) {

name=newName;//

NSLog(@"父类的构造方法被调用。。。。");

}

return self;

}

@end

mian文件

Oc代码


TestExtends* te=[[TestExtends alloc] init];

[te setName:@"Object-c"];

NSLog(@"简单的实现");

运行结果:

2015-11-04 22:35:10.327 test_01[1287:67105] 调用父类的setName方法

2015-11-04 22:35:10.328 test_01[1287:67105] 简单的实现

(lldb)

分析

创建对象

TestExtends* te=[[TestExtends alloc] init];

调用setName方法

[te setName:@"Object-c"];

NSLog(@"简单的实现");

子类 定义Person类继承TestExtends类

TestExtends.h文件

Oc代码


#import "TestExtends.h"

@interface Person :TestExtends

@property NSString* address;//定义变量

-(void)setAddress:(NSString*)newAssress;//定义方法

-(id)initWithChild:(NSString*)newAssress;//定义构造函数的方法

@end

#endif /* Person_h */

TestExtends.m文件

Oc代码


#import "Person.h"

@implementation Person

@synthesize address;

-(void)setAddress:(NSString *)newAssress{

[super setName:newAssress];

NSLog(@"子类的地址是%@",newAssress);

}

-(id)initWithChild:(NSString *)newAssress{

if (self==[super initWithC:newAssress]) {

address=newAssress;

NSLog(@"子类的构造函数被调用了。。。");

}

return self;

}

@end

main文件

Java代码


Person* tec=[[Person alloc]initWithChild:@"Android"];

[tec setAddress:@"China"];

运行结果:

Oc代码


2015-11-04 22:40:42.288 test_01[1306:70521] 父类的构造方法被调用。。。。

2015-11-04 22:40:42.289 test_01[1306:70521] 子类的构造函数被调用了。。。

2015-11-04 22:40:42.289 test_01[1306:70521] 调用父类的setName方法

2015-11-04 22:40:42.289 test_01[1306:70521] 子类的地址是China

(lldb)

分析:

1, Person* tec=[[Person alloc]initWithChild:@"Android"];创建对象首先调用父类的方法:原因如下

Java代码


-(id)initWithChild:(NSString *)newAssress{

if (self==[super initWithC:newAssress]) {//调用父类的构造方法

address=newAssress;

NSLog(@"子类的构造函数被调用了。。。");

}

return self;

}

2, [tec setAddress:@"China"];方法中存在 [supersetName:newAssress];调用父类的方法

影音先锋电影 http://www.iskdy.com/
将mian文件中的 Person* tec=[[Personalloc]initWithChild:@"Android"];

[tec setAddress:@"China"];

改为 TestExtends* te=[[Person alloc] init];

[te setName:@"nihao"];

运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: