黑马程序员技术交流社区

标题: OCday3下 [打印本页]

作者: yufang1993    时间: 2015-11-18 00:10
标题: OCday3下
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",本质是字符数组.

作者: 仰望星空的猪    时间: 2015-11-18 23:52
赞一个 加油
作者: 唐阿丽    时间: 2015-11-19 07:14
赞一个 加油




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2