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:];
[tmp0 printName:@"tag"]; ClassB *tmp1 = [[ClassB alloc] init];
[tmp1 setId: andName:@"hi"];
[tmp1 printName:@"_fredric"]; NSLog(@"%i", tmp0->_id); //除非_id设置为public,否则报权限控制错误; }
return ;
}

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

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. Objective C运行时(runtime)

    #import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------ ...

  3. Objective C类方法load和initialize的区别

    Objective C类方法load和initialize的区别   过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于 ...

  4. Objective C运行时(runtime)技术的几个要点总结

    前言:          Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...

  5. Objective-C与C++的区别

    1.两者的最大相同:都是从C演化而来的面相对象语言,两者都兼容标准C语言 2.两者的最大不同:Objective-C提供了运行期动态绑定机制,而C++是编译静态绑定,并且通过嵌入类(多重继承)和虚函数 ...

  6. OC 继承子类对象调用方法机制 子类对象访问父类中的实例变量

    在继承中,子类对象如何调用到正确方法的机制 每一个Objective - C对象都有一个隐藏的指针指向类的代码,当向一个对象发送消息的时候,当前的对象会首先在当前类里去查找相应的方法,如果找到的话,直 ...

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

    1 MRC练习 1.1 问题 引用计数是Objective-C语言采用的一种内存管理技术,当一个对象被创建在堆上后,该对象的引用计数就自动设置为1,如果在其它对象中的对象成员需要持有这个对象时,则该对 ...

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

    swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引 ...

  9. iOS开发——新特性OC篇&Objective新特性

    Objective新特性 Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时, ...

  10. Objective中的协议(Protocol)

    Objective中的协议(Protocol) 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法 ...

随机推荐

  1. [转]学术型 github 畅想

    转自 http://wulfric.me/2013/09/github-and-academy/ 以 github 的精神提供学术服务,也许是一个不错的方向. 什么是 github? Github 是 ...

  2. heading python decorator

    decorator make a wrapper function do something before and after the original function. The wrapper f ...

  3. KindleEditor上传文件报404

    初步怀疑是iis配置的允许上传大小太小了,然后就修改了配置文件但是不起作用. 后来百度了下iis版本是7.5,然后就按照iis8 的配置: IIS8请求筛选模块被配置为拒绝超过请求内容长度,在&quo ...

  4. C#图片保存到本地

    /// <summary> /// 上传微信头像到服务器 /// </summary> /// <param name="imgUrl">< ...

  5. 陨石坑之webapi使用filter

    首先为什么说这是一个坑,是因为我们在webapi中使用filter的时候也许会先百度一下,好吧,挖坑的来了,我看了好几篇文章写的是使用System.Web.Mvc.Filters.ActionFilt ...

  6. MS SQL查看效率语句 与PLSQL中F5功能相同

    使用方法:打开SQL SERVER 查询分析器,输入以下语句: SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME O ...

  7. 转:eclipse以及step into step over step return的区别

    首先来讲一下step into step over step return的区别: step into就是单步执行,遇到子函数就进入并且继续单步执行:(F5) step over是在单步执行时,在函数 ...

  8. android 模拟器上网问题

    android 模拟器上网问题 1.配置Adroid环境变量(Win7为例) ,启动模拟器 第一步:桌面右键——>我的电脑——>高级系统设置    第二步:高级——>环境变量——&g ...

  9. liunx 字符编码问题

    查询当前服务器的编码:echo $LANG 设置服务器的编码:LANG=en_US.UTF-8

  10. 高性能 CSS3 动画

    注:本文出自腾讯AlloyTeam的元彦,文章也可以在github上浏览.请尊重版权,转载请注明来源,多谢-- 高性能移动Web相较PC的场景需要考虑的因素也相对更多更复杂,我们总结为以下几点: 流量 ...