类的继承是oop中的基本原则,下面就来分析一下oc的类和继承
在实现继承出现了子类的.m文件报错 mission@end 导致程序没发编译,最后发现是.h中少了一个@end
父类 TestExtends.h文件
@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文件
#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文件
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文件
#import "TestExtends.h" @interface Person :TestExtends @property NSString* address;//定义变量 -(void)setAddress:(NSString*)newAssress;//定义方法 -(id)initWithChild:(NSString*)newAssress;//定义构造函数的方法 @end #endif /* Person_h */
TestExtends.m文件
#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文件
Person* tec=[[Person alloc]initWithChild:@"Android"]; [tec setAddress:@"China"];
运行结果:
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"];创建对象首先调用父类的方法:原因如下
-(id)initWithChild:(NSString *)newAssress{ if (self==[super initWithC:newAssress]) {//调用父类的构造方法 address=newAssress; NSLog(@"子类的构造函数被调用了。。。"); } return self; }
2, [tec setAddress:@"China"];方法中存在 [supersetName:newAssress];调用父类的方法
将mian文件中的 Person* tec=[[Personalloc]initWithChild:@"Android"];
[tec setAddress:@"China"];
改为 TestExtends* te=[[Person alloc] init];
[te setName:@"nihao"];
运行结果:
2015-11-04 23:20:16.150 test_01[1479:87156] 调用父类的setName方法
相关推荐
只是一个简单的小例子,演示了OC中的封装继承多态,在Windows下打成的zip压缩包
继承
2.OC使用协议实现多继承,可以遵守多个协议实现多接口。category是OC中的类别,类别是用于给一个现有类添加新方法。重写类一般采用继承的方式,分类(类别)在给以个类添加同名方法后,会造成原有类中方法的实效,而...
信手拈来的OC弹窗库:继承 FWPopupBaseView 即可轻松实现各种位置、动画类型的弹窗,简单易用、方便快捷
JSPatch,js与oc交互 https://github.com/michanMC/js-oc- 代码大于5M上传不了,走github
iOS 自定义UITabBar中间按钮(OC版), 创建一个自定义的YLTabBar继承自UITabBar
OC-category的方法能被子类继承吗?2.它覆盖原有类的方法后,原有类的方法还能调用吗?如果能,你说明理由。
继承类的例题,主要应用OC的学习中使用的源代码;配套与我的博客http://write.blog.csdn.net/postlist
一个Objective-C简单继承代码,“学生”类,“老师”类继承“人”类
NULL 博文链接:https://1615926449.iteye.com/blog/1714692
iPhone/Mac Objective-C 内存管理教程和原理剖析 初学 objectice-C 的朋友都有一个困惑,总觉得对 objective-C 的内存管理 机制琢磨不透,程序经常内存泄漏或...此文涉及的内存管理是针对于继承于 NSObject 的 Class。
Objective-C链式编程Demo,自己实现了一个链式编程,通过对属性字符串NSAttributeString的封装实现了方便的通过链式编程来设置属性字符串各种属性的目的。 才疏学浅,不对的地方,请指正。
自己定义的一款OC的BaseViewController,继承后,可方便的显示,隐藏导航,自定义导航,避免重复判断是否为ios7。
UICollectionView纵横布局商品切换、商品详情页弹性差效果、UIWebView和WKWebView(进度条动画、OC和JS交互继承封装)、基于MJRefresh深度定制下拉刷新
OC中有没有多继承?OC中怎么实现多继承功能? category和subclass的异同?平时怎样选择? OC中的变量是怎样存储的? block是怎样改变外界的变量的?怎样破除block产⽣生的retain cycle? 为什么不能在getter⾥里使⽤用点...
一般类都是继承NSObject,新建一个类时父类选择NSObject即可,oc只有单继承,没有多继承。 下面以一个简单的oc工程来讲解(需配置好Xcode工具以相应的SDK),会建工程的请直接跳到‘六’步骤。 一、新建一个oc编译...
资源名称:iOS应用开发之Objective-C视频讲解(全套) 资源目录: ... 【】1.ios预科班_oc_... 【】4ios预科班_oc_存取器_继承_动态绑定和i 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
IOS之弹窗-OC /温馨提示: 1、同一窗口内目前只支持弹窗一个弹窗,如果需要同时展示两个弹窗,建议与系统或者其他自定义弹窗配合使用;2、如需两个弹窗接连使用,请保证第一个弹窗完全消失再调用第二个弹窗;3、鉴于...
首先在一个OC项目中新建一个Swift类,继承自UITableViewController,并且修改其view背景色,方便后续测试。 import UIKit class ESSwiftTableViewTestVc: UITableViewController { override func
首先,Objective-C中不完全支持重载,网上很多人要么将重载和重写搞混,要么说OC不支持重载(当然按照重载严格定义说OC不支持重载也没错),事实上OC支持参数个数不同的函数重载。 问题: Objective-C和Swift中有...