奇葩的OBJ-C ~ 1 父类的类方法可以用来新建一个子类的对象 -- 使用关键字self
来源:互联网 发布:网络语数字 编辑:程序博客网 时间:2024/04/30 02:47
OC里允许使用父类对象的指针给子类的指针赋值,编译的时候只报个warning,这个已经够奇葩了,但是还有更奇葩的...
如下面代码所示,父类里有一个类方法,返回一个新生成的本类对象。 子类里并没有重写这个类方法,但是使用的时候却可以通过这个方法来生成一个子类的对象,经isKindOfClass方法测试,生成的确实是本类的对象。
如代码中注释所示,本代码的关键点在于使用了 self 关键字,若将其替换为父类的名字,则本方法失效
#import <Foundation/Foundation.h>
@interface animal :NSObject
{
NSString * strName;
}
@property(readwrite,retain,nonatomic)NSString* strName;
+(instancetype) initWithName :(NSString *) strX;
-(void)SetName:(NSString *) strX;
@end
@implementation animal :NSObject
@synthesize strName;
+(instancetype) initWithName :(NSString *) strX
{
return [selfnew]; //这里写self很关键,否则返回本方法就不能给子类使用
//return [animal new];
}
-(void)SetName:(NSString *) strX
{
strName=strX;
}
@end
@interface sheep :animal
{
int iWeight;
}
@end
@implementation sheep:animal
@end
int main(int argc,const char * argv[]) {
NSAutoreleasePool *pool =[NSAutoreleasePoolnew];
sheep *spX=[sheepinitWithName:@"mimi"];
BOOL bFlag=[spXisKindOfClass:[sheepclass]];
NSLog(@"%i",bFlag); //若animal类里使用的是 self ,则这里输出为1 ; 若使用的是 animal,这里输出的是0
[pool drain];
return0;
}
- 奇葩的OBJ-C ~ 1 父类的类方法可以用来新建一个子类的对象 -- 使用关键字self
- java 子类可以继承父类中的什么,子类中方法覆盖,final关键字的含义
- 黑马程序员-Object-C封装,和对象.类方法,self关键字的用法总结
- 子类可以直接使用父类的变量、方法吗?
- 指向父类的指针可以指向子类的对象
- self 关键字的使用
- 子类可以重写父类的静态方法吗
- 一个用来统计c语言关键字出现次数的程序
- OC---self关键字的使用
- 子类的对象调用父类的方法
- 【Java笔记】继承父类的方法可以调用子类的方法(子类必须在重写相应方法)
- Obj 类的使用
- 父类的引用指向子类的对象怎么调用子类的方法
- ios开发-OC类方法和self关键字的学习
- 编写类A,该类创建的对象包含一个方法f输出英文字母表,再编写一个A类的子类B,要求必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字线表,而且调用子类新增的方法g输出希腊字
- 类小结2:子类对象和父类对象的转换 final关键字 抽象类
- 子类对象调用父类方法包含子类覆盖的方法
- c++,父类指针指向子类对象的相关说明
- leetcode - Swap Nodes in Pairs
- html 标签 a target 属性
- oracle spfile 文件不要随便修改
- Oracle 默认日期格式修改
- MyEclipse Hibernate反向工程生成实体类
- 奇葩的OBJ-C ~ 1 父类的类方法可以用来新建一个子类的对象 -- 使用关键字self
- Validate Binary Search Tree
- 依赖 关联 聚合 组合
- oracle date 比较
- Java程序员到架构师的推荐阅读书籍
- House Robber
- Android—开发自学历程(1)-Activity(5)-ListView
- ipv4 子网掩码 及 分类编址
- STL--map学习