super
是什么?
关键字
有什么用?
调用父类中的同名方法.
怎么用?
//
#import <foundation/Foundation.h>
@interface Animal :NSObject{
int age;
}
-(void)run;
@end
@implementation Animal
-(void)run{
NSLog(@"跑......");
}
@end
@interface Dog :Animal{
}
-(void)run;
@end
@implementation Dog
-(void)run{
NSLog(@"在地上跑......");
NSLog(@"狗变成了动物");
[super run];
}
@end
int main(){
[[Dog new] run];
return 0;
}
什么时候用?
子类重写了父类,但有时又需要调用父类的同名方法.
特点?.
1.不能调用属性,只能调用方法.且不要调用非重写方法.然而是能够成功调用的.
2.对象的方法只能调用对象的方法,类的方法只能调用对象的方法.
//
#import <foundation/Foundation.h>
@interface Animal :NSObject{
int age;
}
-(void)run;
-(void)eat;
+(void)dead;
@end
@implementation Animal
-(void)run{
NSLog(@"跑......");
}
-(void)eat{
NSLog(@"吃.....");
}
+(void)dead{
NSLog(@"死了.....");
}
@end
@interface Dog :Animal{
// int age;错误
}
-(void)run;
+(void)shout;
@end
@implementation Dog
-(void)run{
NSLog(@"在地上跑......");
NSLog(@"狗变成了动物");
[super run];
[super eat];//调用父类中非重写方法是可以的,然而不要这么做.用self.
// [super dead];//2.对象的方法只能调用对象的方法,.
[Animal dead];//这样是OK的.把Aniaml改成Dog还是挂.
// super->age=10;错误:不能访问属性
}
+(void)shout{
NSLog(@"汪汪.....");
[super dead];//类的方法只能调用对象的方法
}
@end
int main(){
// [[Dog new] run];
[Dog shout];
return 0;
}
多态
是什么?
事物具有多种形态.用代码来说则是,父类指针指向子类对象.前提是类之间具有继承关系.
有什么用?
提高代码的复用性;简化代码....很强的扩展性
怎么用?
//多态
//
#import <foundation/Foundation.h>
@interface Animal :NSObject{
int age;
}
-(void)run;
-(void)eat;
+(void)dead;
@end
@implementation Animal
-(void)run{
NSLog(@"跑......");
}
-(void)eat{
NSLog(@"吃.....");
}
+(void)dead{
NSLog(@"死了.....");
}
@end
@interface Dog :Animal{
}
-(void)run;
-(void)shout;
@end
@implementation Dog
-(void)run{
NSLog(@"在地上跑......");
}
-(void)shout{
NSLog(@"汪汪.....");
// [super dead];
}
@end
@interface Cat :Animal{
}
@end
@implementation Cat
@end
int main(){
Animal *an=[Dog new];
[((Dog *)an) shout];
// [an run];
// Dog *t=(Dog *)an;
// [t shout];
// an=[Cat new];
// [an run];
return 0;
}
什么时候用?
特点?
1.父类类型的变量不能直接调用子类特有的方法,必须强转.重写的除外
2.当父类类型作为参数被传递,可以传入任意子类对象.
//多态
//
#import <foundation/Foundation.h>
@interface Animal :NSObject{
int age;
}
-(void)run;
-(void)eat;
+(void)dead;
@end
@implementation Animal
-(void)run{
NSLog(@"跑......");
}
-(void)eat{
NSLog(@"吃.....");
}
+(void)dead{
NSLog(@"死了.....");
}
@end
@interface Dog :Animal{
}
-(void)run;
-(void)shout;
@end
@implementation Dog
-(void)run{
NSLog(@"在地上跑......");
}
-(void)shout{
NSLog(@"汪汪.....");
// [super dead];
}
@end
@interface Cat :Animal{
}
@end
@implementation Cat
@end
@interface Person :NSObject{
}
-(Animal *)weiShi:(Animal *)an;
@end
@implementation Person
-(Animal *)weiShi:(Animal *)an{
Animal * p=an;
return p;
}
@end
int main(){
Animal *an=[Dog new];
[((Dog *)[[Person new] weiShi:an]) shout];//2.当父类类型作为参数被传递,可以传入任意子类对象.
// [an run];//调用的是子类的方法.
// [((Dog *)an) shout];
// [an run];
// Dog *t=(Dog *)an;
// [t shout];
// an=[Cat new];
// [an run];
return 0;
}
NSString
是什么?
一个类.OC独有的字符串.
有什么用?
OC中用于表示文本,字符串
怎么用?
//NSString
#import <foundation/Foundation.h>
int main(){
// 定义一个字符串
NSString *nameOc=@"张三abc";
int age=15;
// 定义一个按格式动态生成的字符串
NSString *xx=[NSString stringWithFormat:@"姓名是:%@,年龄是%d",nameOc,age];
NSLog(@"%@",xx);
//获取字数,不是字节数.一个汉字相当于一个英文字符
NSLog(@"%ld",[nameOc length]);
return 0;
}
特点?
是一个类,而char *p="abc",本质是字符数组.
|
|