您的位置:首页 > 职场人生

黑马程序员 _7 OC基础 继承、多态、分类

2014-04-02 21:02 190 查看
---------------------- ASP.Net+Unity开发.Net培训、期待与您交流!
----------------------

一、继承

1.当两个类具有公共属性和行为时,可以抽出一个父类,类似Bird 和Dog都是动物,如下

@interface Bird : NSObject
{
    @public
    int weight;
}
- (void)eat;
@end
@interface Bird : NSObject
{
    @public
    int weight;
}
- (void)eat;
@end
Dog类似,可以先定义一个父类Animal,就像
@interface Animal : NSObject
{
    @public
        int weight;
}
- (void)eat;
@end
// Animal的定义
@implementation Animal
- (void)eat  ;
@end
定义子类时:只需将NSObject替换为相应父类。

子类将会继承父类所有的属性和方法,子类还可以重写父类方法,因为子类访问过程是先访问子类有没有,如果子类没有就去访问父类,

子类不能与父类有相同的成员变量。

利用super可以调用父类的对象方法和类方法。父类被继承后仍然可以正常使用。

2.继承的好处:

继承像是将类之间的联系了起来,减少了代码的不必要的书写。但坏处就是耦合性强。

3.super的作用

直接调用父类中的某个方法
super处在对象方法中,那么就会调用父类的对象方法
super处在类方法中,那么就会调用父类的类方法
父类中的test类方法
+ (void)test
{
    NSLog(@"Zoombie+test");
子类调用的super使用方式

+ (void)haha
{
    [super test];
}


3.使用场合:子类重写父类的方法时想保留父类的一些行为

二、多态

没有继承就没有多态,没有多态就没有类丰富的变化。

多态展示了事物的多种形态,OC对象具有多态性。

如:

Person *p = [Student new];
p->age = 100;
[p walk];
Person是Student的父类,多态两边的类就是指不是同一类,将子类的对象赋值给父类指针,但是该对象必须子类父类共有,不能是子类特有的对象,这样父类的指针*p访问的会是子类的属性和方法,节省了代码,但是不具有子类特有的方法属性。
注意:如果子类在左边,父类在右边会报错,因为调用方法时会检测对象的真实形象

三 OC中的字符串使用

OC中的字符串最简单的创建方式

NSString *str = @"itcast";
     char *name = "itcast";
     NSLog(@"我在%@上课", str);
    NSLog(@"%s", name);




四、分类

利用Cateagory分类可以给系统自带类扩充自己需要的方法,格式如下

@interface 类名 (分类名称)
// 方法声明
@end
	分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end


类文件可以让多个人共同开发,实现团队合作。

注意:Category只能添加方法,不能添加变量。多个Category中实现了同名方法,只有最后一个参与编译的会生效,类似会覆盖的效果。

补充:类文件是类的补充扩展..并不是单独的类,所以不能定义新的变量,所以它不能初始化对象.

四、 +load和+initialize

1.+load 程序其董事会自动加载,不管有没有调用这个类。

2.+initialize当某个类被调用时,会自动调用+initialize方法,一个类只会调用一次。先调用父类,在调用子类.

如:

// 当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法
+ (void)load
{
    NSLog(@"Person---load");
}
// 当第一次使用这个类的时候,就会调用一次+initialize方法
+ (void)initialize
{
    NSLog(@"Person-initialize");
}
@end


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流!
----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: