`
百合不是茶
  • 浏览: 355889 次
社区版块
存档分类
最新评论

oc继承

阅读更多

类的继承是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方法

0
0
分享到:
评论

相关推荐

    OC封装继承多态演示

    在这个"OC封装继承多态演示"的例子中,我们将深入探讨这三个关键的OOP原则。 **封装**是面向对象编程的核心特性之一,它涉及到将数据(属性)和操作这些数据的方法(函数)捆绑到一个独立的单元——对象中。在OC中...

    OC 基础 继承Demol.zip

    在OC中,"继承"是面向对象编程中的一个核心概念,它允许一个类(子类)从另一个类(父类)继承属性和方法,从而实现代码重用和扩展性。下面我们将深入探讨OC中的继承机制及其相关知识点。 1. **类的层次结构** OC...

    ios-利用JSPatch,js与oc交互,js继承oc直接原生类和控件.zip

    【iOSDemo】项目展示了如何利用JSPatch技术在iOS应用中实现JavaScript(JS)与Objective-C(OC)的交互,让JS能够直接继承OC的原生类和控制。JSPatch是一种动态运行时的解决方案,它允许开发者通过JS来修改、扩展iOS...

    Swift和OC混编

    - Swift的类需要继承自`NSObject`,或者实现一个`@objc`协议,才能在OC中创建实例。 - OC可以通过`NSClassFromString`动态创建Swift类的实例,并通过`performSelector:`方法调用方法。 - OC可以使用`@selector`...

    OC底层原理之OC语法

    Category是Objective-C中的一个重要特性,可以给已有的类添加方法,而无需继承。这使得我们可以扩展系统类的功能,或者为分类库提供便捷的方法。但是,Category不能添加实例变量。 4. **load 和 initialize**: -...

    OC练习题(全套)

    【OC练习题(全套)】是一份集合了Objective-C(简称OC)编程语言的练习题资源,主要以PPT的形式呈现,旨在帮助学习者通过实际操作来加深对OC的理解和应用能力。这份资料可能来源于某知名的培训机构,内容涵盖广泛,且...

    oc学习资料

    - **It All Begins at the Root**:所有 OC 类都间接或直接继承自 NSObject,理解 NSObject 的重要性及其提供的基础方法。 - **Finding the Right Method**:多态性概念,解释如何在继承链中找到正确的方法来执行。 ...

    OC学生管理系统

    Objective-C,简称OC,是苹果公司为Mac OS X和iOS操作系统开发的一种面向对象的编程语言,它是C语言的超集,继承了C的强大功能并引入了Smalltalk的面向对象特性。在OC中,我们可以使用Foundation框架来处理文件操作...

    继承类的源代码

    这个"继承类的源代码"文件集合,可能是为了演示如何在OC中实现继承机制以及在实际项目中的应用。以下是对这一主题的详细解释。 1. **继承的基本概念**: 继承允许我们创建一个新类(子类或派生类),该类基于已...

    oc疯狂讲义

    - Protocol:协议类似于接口,定义了一组方法签名,多个类可以遵循同一协议,实现多继承的效果。 - Blocks:OC的闭包(Blocks)允许我们将代码块当作参数传递,方便地进行异步操作或回调处理。 - KVC(Key-Value ...

    swift-OC弹窗库继承FWPopupBaseView即可轻松实现各种位置动画类型的弹窗

    开发者只需继承这个基类,就可以快速创建自己的弹窗视图。`FWPopupBaseView`已经封装了弹出和消失的动画逻辑,以及弹窗的位置设置,使得弹窗的实现变得简单而高效。 首先,我们来看如何在Swift项目中引入...

    oc源码基础教程

    【标题】"oc源码基础教程"涉及到的是Objective-C编程语言的基础学习,这是一门广泛应用于iOS和Mac OS X开发的重要语言。Objective-C是C语言的超集,它添加了面向对象的特性,如类、继承、多态和消息传递等。 【描述...

    OC部分面试题

    在面试中,面试官经常关注开发者对OC基础知识的掌握,包括类的继承、协议、Category、内存管理等核心概念。以下是对这些知识点的详细说明: 1. **Objective-C的继承与接口**:Objective-C不支持多继承,但可以通过...

    iOS史上最全的OC笔记

    5. **协议与代理**:OC的协议是一种实现多继承的方式,常用于实现对象间的通信。代理模式是iOS开发中的常见设计模式,笔记会讲解如何定义和使用代理。 6. **块(Block)**:OC的块是内联函数的一种形式,可以作为...

    OC植物大战僵尸

    1. **面向对象编程**:Objective-C的核心是其面向对象的特性,它支持类、对象、继承、多态和封装等概念。游戏中的每个元素,如植物、僵尸、阳光等,都可以被设计为独立的对象,每个对象都有自己的属性和行为。 2. *...

    我的博客中OC学习第四天的代码练习题

    在“我的博客中OC学习第四天的代码练习题”这个主题下,我们主要探讨的是Objective-C(简称OC)编程语言的学习实践。Objective-C是苹果公司为iOS和macOS平台开发应用的主要语言,它基于C语言并扩展了面向对象的功能...

    OC学习的全部总结

    OC支持继承,子类可以继承父类的属性和方法。初始化方法通常以`initWith...`开头,用于在创建对象时直接设置某些实例变量的初始值。指定初始化方法是父类必须调用的初始化方法,通过`super`调用父类的指定初始化方法...

    OC圆形Slider.

    圆形Slider的实现基于UIKit框架,可能使用了自定义视图(UIView)或者继承自UISlider进行扩展。在"OC圆形Slider"中,开发者可能对UISlider进行了重绘,以呈现圆形外观,同时添加了额外的功能,如tap手势识别和pan...

    OC语言源代码

    Category是Objective-C中扩展类功能的方法,无需继承。它可以在不修改原有类的情况下,为已有的类添加方法,实现对已有类的功能扩展或分类管理。 3. **KeyValueCoding**: `9781430241881_ch18_KeyValueCoding.zip...

    iOS 学习OC语言部分,代码和笔记,超详细

    在iOS开发领域,Objective-C(简称OC)是苹果公司官方支持的主要编程语言之一,尤其对于老版本的系统,它是开发的基石。本压缩包提供的学习资料涵盖了OC语言的基础到高级特性,结合代码实例和详细笔记,是iOS开发者...

Global site tag (gtag.js) - Google Analytics