objective-c(继承)

objective-c的继承给出基础例子及注意点:

  • 定义并实现基类ClassA
#import <Foundation/Foundation.h>

@interface ClassA : NSObject{
    @public //@private  @protected//objective-c有三种权限控制,同c++、java;//1、private:只被该类自己的方法使用,子类也不可用;//2、protected:默认权限,能够被子类使用;但其他类不可用;//3、public:完全开放,不建议使用;
    int _id;
}

@property int _id;

-(void) setId:(int)id;
-(void) printName: (NSString*) tag;

@end
#import "ClassA.h"

@implementation ClassA

@synthesize _id;

-(void) setId:(int)id{    //此处注意self调用的陷阱
    //self.id = input; 造成循环调用
    //[self setId:input]; 造成循环调用,与上例等价
    _id = id;
}

-(void)printName:(NSString *)tag{
    NSLog(@"%@,%i", tag,_id);
}

@end
  • 定义并实现子类B
#import "ClassA.h"

@interface ClassB : ClassA{
    NSString *_name; //从编程规范性角度建议采用_XX方式
}

@property NSString *_name;

-(void) setId:(int)id andName:(NSString*)name;
-(void) printName:(NSString *)tag;

@end
#import "ClassB.h"

@implementation ClassB

@synthesize _name;

-(void) setId:(int)id andName:(NSString *)name{
    [super setId:id]; //使用super初始化基类
    self._name = name;
}

-(void) printName:(NSString *)tag{
    NSLog(@"%@,%i", [self._name stringByAppendingString:tag], self->_id);     //若_id在ClassA中设置为private,则此处报错;    //->不同于.操作符,.操作符相当于是用了get方法,不存在权限控制;
}

@end
  • 测试
#import <Foundation/Foundation.h>
#import "ClassA.h"
#import "ClassB.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        ClassA *tmp0 = [[ClassA alloc]init];
        [tmp0 setId:21];
        [tmp0 printName:@"tag"];

        ClassB *tmp1 = [[ClassB alloc] init];
        [tmp1 setId:3 andName:@"hi"];
        [tmp1 printName:@"_fredric"];

        NSLog(@"%i", tmp0->_id); //除非_id设置为public,否则报权限控制错误;

    }
    return 0;
}
时间: 2024-10-12 17:11:16

objective-c(继承)的相关文章

objective C中继承、协议、分类和多态的实现

第一.objective C中继承的实现 在oc中只有实例变量会有权限控制,实例方法和类方法是没有权限控制的,这点与c++不同,OC默认的是protected,并且在声明权限控制时,没有分号 在OC中可以像C++一样用指针运算法来访问实例变量 Rectangle.h 文件代码: #import <Foundation/Foundation.h> @interface Rectangle : NSObject { int _width; int _height; } @property (non

OC中protocol、category和继承的区别

利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"(OCP)的办法,也是最常见的一种方法.Objective C还支持另外两种语法来支持OCP:Protocol和Category.Protocol只能定义一套接口,而不能提供实现,变相的也是一种Abstract class的实现方式(oc 语法上本身不支持抽象基类).Category可以为类提供额外的接口和实现.那么到底三者(继承, Protocol,Category)在使用上到底有什么本质的区别呢?在我看来,protocol的作

C++ vs Objective C

oc Short list of some of the major differences: C++ allows multiple inheritance, Objective-C doesn't.一个允许多继承,一个不允许Unlike C++, Objective-C allows method parameters to be named and the method signature includes only the names and types of the parameter

objective - c 类和对象

知识点 1.初步认识 OC 2.xcode使用 3.面向对象编程思想,类和对象 4.类的定义和使用 5.类的实例化--对象 6.声明和实现相分离 =========================================== 1.需要理解的(理论部分) 第一部分:OC和面向对象 1.1.OC语言的历史,特点.重要程度 [什么是OC] objective - c   在C语言基础上开发, 面向对象的语言: 注意C语言和oc语言语法的区别: IOS, iphone, ipad … [进入OC

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

Objective-C----MRC内存管理 、 自动释放池 、 面向对象三大特性及封装 、 继承 、 组合与聚合

1 MRC练习 1.1 问题 引用计数是Objective-C语言采用的一种内存管理技术,当一个对象被创建在堆上后,该对象的引用计数就自动设置为1,如果在其它对象中的对象成员需要持有这个对象时,则该对象的引用计数被加上1,此时如果该对象被释放,内存管理程序将首先把该对象的引用计数减1,然后判断该对象的引用计数是否为0,由于其它对象在持有该对象时将引用计数加了1,所以此时该对象的引用计数减1后不为0,则内存管理程序将不会释放该对象.直到持有该对象的其它对象也被释放时,该对象的引用计数再次减1,变为

Objective-C 源码(一):对象模型

首先,你要先弄清楚什么是类,什么是对象.(为了说清楚这个问题,先举个栗子:类->对象->实例:人类是类:某个人是对象:你是实例:实例本身也是对象.这下基本能理解其中的差别了,要是还是搞不清楚,自己去google一下吧.) 对象 在Objective-C中,每一个对象都是某个类的实例,且这个对象的isa指针指向它所属的类.打开 objc-private.h文件,在第126行可以看到 Objective-C???? 对象的定义struct objc_object ,Objective-C中对象本质

iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象

1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较.这一篇文章,我准备为大家介绍一下奇葩的Objective-C语言的语法和使用.这篇文章主要讲Objective-C的理论概念. 2.学习目标 2.1 Objective-C语言面向对象的特性与其他语言(C++)类比学习,声明定义一个MyObject类,并创建这个类的实例. 2.2 Objectiv

编写高质量代码-OC 第6章 继承与面向对象设计

41.明确isa在继承上的作用 1.在Objective-C中,每个对象都隐藏着一个数据结构isa指针 2.isa指针指向的是对象的类,这个类也是一个对象,有自己的权. 3.在Objective—C中,每个对象还都保留一个超类的指针,通过该指针可调度自己已有的方法和调度基类. 42.利用类别和协议实现类似多重继承的机制 1.类别,实现了类的相关方法的模块化,把不同的类方法分配到不同的分列文件中. 2.类别可以重载原始类的方法,但不推荐这么做,这么做得后果是再也不呢过访问原来的方法,如果确实要重载

iOS开发——技术精华Swift篇&amp;Swift 2.0和Objective-C2.0混编之第三方框架的使用

Swift 2.0和Objective-C2.0混编之第三方框架的使用 swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引入了多种新功能,使得编程工作更加简便,灵活! 2015年6月9日苹果又一次给所有开发之者带来了一个惊喜,那就是今年年底swift讲开源,者队iOS开发着来说无疑是一个值得兴奋的消息,可是就在这短短的几个月里面swift吸引了越来