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"];
运行结果:
相关文章推荐
- Android ListView 添加 HeaderView后,HeaderView的布局不起作用
- C语言运算符优先级误解
- 安装LABVIEW2012的全过程自己总结
- Windows.old
- Why Javascript only works after opening developer tools in IE once?
- 一看就明白的爬虫入门讲解:基础理论篇
- zabbix服务器安装教程
- JAVA 自定义异常类
- Java批量修改本地Mp3的名称为Mp3Tag中的歌名
- MySQL忘记密码的正确解决方法
- Linux c 源码(getvalbypos根据位置和特定的字符解析所需的信息)
- 微软专家推荐11个Chrome 插件
- @Transactional spring 配置事务 注意事项
- PHP设计模式之一策略模式
- Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)
- 指针
- Android Sqlite synchronous设置
- wpf 图片平移、旋转和缩放
- [Android] 随时拍图像处理部分总结及源码分享
- 图表控件AnyChart v7.8.0发布【附下载】