类的继承是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封装继承多态演示"的例子中,我们将深入探讨这三个关键的OOP原则。 **封装**是面向对象编程的核心特性之一,它涉及到将数据(属性)和操作这些数据的方法(函数)捆绑到一个独立的单元——对象中。在OC中...
在OC中,"继承"是面向对象编程中的一个核心概念,它允许一个类(子类)从另一个类(父类)继承属性和方法,从而实现代码重用和扩展性。下面我们将深入探讨OC中的继承机制及其相关知识点。 1. **类的层次结构** OC...
【iOSDemo】项目展示了如何利用JSPatch技术在iOS应用中实现JavaScript(JS)与Objective-C(OC)的交互,让JS能够直接继承OC的原生类和控制。JSPatch是一种动态运行时的解决方案,它允许开发者通过JS来修改、扩展iOS...
- Swift的类需要继承自`NSObject`,或者实现一个`@objc`协议,才能在OC中创建实例。 - OC可以通过`NSClassFromString`动态创建Swift类的实例,并通过`performSelector:`方法调用方法。 - OC可以使用`@selector`...
Category是Objective-C中的一个重要特性,可以给已有的类添加方法,而无需继承。这使得我们可以扩展系统类的功能,或者为分类库提供便捷的方法。但是,Category不能添加实例变量。 4. **load 和 initialize**: -...
【OC练习题(全套)】是一份集合了Objective-C(简称OC)编程语言的练习题资源,主要以PPT的形式呈现,旨在帮助学习者通过实际操作来加深对OC的理解和应用能力。这份资料可能来源于某知名的培训机构,内容涵盖广泛,且...
- **It All Begins at the Root**:所有 OC 类都间接或直接继承自 NSObject,理解 NSObject 的重要性及其提供的基础方法。 - **Finding the Right Method**:多态性概念,解释如何在继承链中找到正确的方法来执行。 ...
Objective-C,简称OC,是苹果公司为Mac OS X和iOS操作系统开发的一种面向对象的编程语言,它是C语言的超集,继承了C的强大功能并引入了Smalltalk的面向对象特性。在OC中,我们可以使用Foundation框架来处理文件操作...
这个"继承类的源代码"文件集合,可能是为了演示如何在OC中实现继承机制以及在实际项目中的应用。以下是对这一主题的详细解释。 1. **继承的基本概念**: 继承允许我们创建一个新类(子类或派生类),该类基于已...
- Protocol:协议类似于接口,定义了一组方法签名,多个类可以遵循同一协议,实现多继承的效果。 - Blocks:OC的闭包(Blocks)允许我们将代码块当作参数传递,方便地进行异步操作或回调处理。 - KVC(Key-Value ...
开发者只需继承这个基类,就可以快速创建自己的弹窗视图。`FWPopupBaseView`已经封装了弹出和消失的动画逻辑,以及弹窗的位置设置,使得弹窗的实现变得简单而高效。 首先,我们来看如何在Swift项目中引入...
【标题】"oc源码基础教程"涉及到的是Objective-C编程语言的基础学习,这是一门广泛应用于iOS和Mac OS X开发的重要语言。Objective-C是C语言的超集,它添加了面向对象的特性,如类、继承、多态和消息传递等。 【描述...
在面试中,面试官经常关注开发者对OC基础知识的掌握,包括类的继承、协议、Category、内存管理等核心概念。以下是对这些知识点的详细说明: 1. **Objective-C的继承与接口**:Objective-C不支持多继承,但可以通过...
5. **协议与代理**:OC的协议是一种实现多继承的方式,常用于实现对象间的通信。代理模式是iOS开发中的常见设计模式,笔记会讲解如何定义和使用代理。 6. **块(Block)**:OC的块是内联函数的一种形式,可以作为...
1. **面向对象编程**:Objective-C的核心是其面向对象的特性,它支持类、对象、继承、多态和封装等概念。游戏中的每个元素,如植物、僵尸、阳光等,都可以被设计为独立的对象,每个对象都有自己的属性和行为。 2. *...
在“我的博客中OC学习第四天的代码练习题”这个主题下,我们主要探讨的是Objective-C(简称OC)编程语言的学习实践。Objective-C是苹果公司为iOS和macOS平台开发应用的主要语言,它基于C语言并扩展了面向对象的功能...
OC支持继承,子类可以继承父类的属性和方法。初始化方法通常以`initWith...`开头,用于在创建对象时直接设置某些实例变量的初始值。指定初始化方法是父类必须调用的初始化方法,通过`super`调用父类的指定初始化方法...
圆形Slider的实现基于UIKit框架,可能使用了自定义视图(UIView)或者继承自UISlider进行扩展。在"OC圆形Slider"中,开发者可能对UISlider进行了重绘,以呈现圆形外观,同时添加了额外的功能,如tap手势识别和pan...
Category是Objective-C中扩展类功能的方法,无需继承。它可以在不修改原有类的情况下,为已有的类添加方法,实现对已有类的功能扩展或分类管理。 3. **KeyValueCoding**: `9781430241881_ch18_KeyValueCoding.zip...
在iOS开发领域,Objective-C(简称OC)是苹果公司官方支持的主要编程语言之一,尤其对于老版本的系统,它是开发的基石。本压缩包提供的学习资料涵盖了OC语言的基础到高级特性,结合代码实例和详细笔记,是iOS开发者...