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:];
[tmp0 printName:@"tag"]; ClassB *tmp1 = [[ClassB alloc] init];
[tmp1 setId: andName:@"hi"];
[tmp1 printName:@"_fredric"]; NSLog(@"%i", tmp0->_id); //除非_id设置为public,否则报权限控制错误; }
return ;
}
objective-c(继承)的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- Objective C运行时(runtime)
#import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------ ...
- Objective C类方法load和initialize的区别
Objective C类方法load和initialize的区别 过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于 ...
- Objective C运行时(runtime)技术的几个要点总结
前言: Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...
- Objective-C与C++的区别
1.两者的最大相同:都是从C演化而来的面相对象语言,两者都兼容标准C语言 2.两者的最大不同:Objective-C提供了运行期动态绑定机制,而C++是编译静态绑定,并且通过嵌入类(多重继承)和虚函数 ...
- OC 继承子类对象调用方法机制 子类对象访问父类中的实例变量
在继承中,子类对象如何调用到正确方法的机制 每一个Objective - C对象都有一个隐藏的指针指向类的代码,当向一个对象发送消息的时候,当前的对象会首先在当前类里去查找相应的方法,如果找到的话,直 ...
- Objective-C----MRC内存管理 、 自动释放池 、 面向对象三大特性及封装 、 继承 、 组合与聚合
1 MRC练习 1.1 问题 引用计数是Objective-C语言采用的一种内存管理技术,当一个对象被创建在堆上后,该对象的引用计数就自动设置为1,如果在其它对象中的对象成员需要持有这个对象时,则该对 ...
- iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用
swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言.Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题.Swift语言采用安全编程模式,且引 ...
- iOS开发——新特性OC篇&Objective新特性
Objective新特性 Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时, ...
- Objective中的协议(Protocol)
Objective中的协议(Protocol) 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法 ...
随机推荐
- Http协议的常见参数
Requests部分 Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accept-Charset 浏览器可以接受的字 ...
- Jquery一般操作归纳
一.DOM操作分类 1.DOM Core getElement(s)获得元素 2.HTML-DOM document.对象/操作标签的属性 3.CSS-DOM ...
- Java Web2
JavaBean组件. 定义方法:(假设有一个JavaBean的类名为CounterBean,它有一个count属性.) //在JSP文件中分别定义4种范围内的JavaBean对象的语法 //in p ...
- Selenium2+python 常用函数汇总
1. driver = webdriver.Chrome() --新建实例 2.driver.find_element_by_id("username") ---通过标签属性id ...
- 【转】简易smtp调用类
用PHP发邮件的一个类,无需验证SMTP主机,类代码你可以不用管,只要按照后面的使用方法操作就行,这个类要先保存成一个php文件,文件名就叫smtp.php吧,下面是该文件代码: <?php c ...
- Java String字符串方法
1.String构造函数 1> String() 2> String(char[] chars) String(char[] chars,int startIndex,int numCha ...
- C语言小练习一
题目要求:国王将金币作为工资,发放给忠诚的骑士.第1天,骑士收到一枚金币:之后两天(第2天和第3天)里,每天收到两枚金币:之后三天(第4.5.6天)里,每天收到三枚金币:之后四天(第7.8.9.10天 ...
- nexus2.1.2的配置
最近在学习maven,逐渐接触到私服的搭建,也就着手学习使用nexus了,在http://www.sonatype.org/nexus/go网站上nexus最新版本的是,不过版本要同jvm的版本匹对, ...
- Fragment要点复习
做系统时间久了,应用层的很多东西都忘了,但是基础还是得巩固,下面对fragment相关的知识点简单整理一下. 一.fragment的引入 fragment是从Android3.0(API level ...
- template学习一函数模板
要点: 1.模板参数在实体化的时候不能自动类型转换,只有非模板函数才可以 例如: int max(int,int); template <class T> T max(T,T); 在调用的 ...