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

黑马程序员——从类说开去,说开去,开去,去......

2015-05-30 17:17 543 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

在对面向对象编程有了一定了解之后,已经可以自己写写简单的程序了。在自己的程序里制造世界,这种感觉就好像天下在手。

不过万事开头难。在“创造万物”之前先来造两个人吧 !

@interface Person : NSObject
{
NSString *_name;
}
@end

@implementation Person
@end
int main (int argc, const char *argv[]) 
{ 
    Person *p1 = [Person new];
    
    person *p2 = [Person new];
    return 0;
}


由于众所周知的原因,这两个人恐怕叫做亚当和夏娃。那么:

Person *p1 = [Person new];
person *p2 = [Person new];
//做个setName方法给他们命名:

- (void)setName:(NSString *)name
{
_name = name;
}


[p1 setName:@"Adam"];
[p2 setName:@"Eve"];


好了,现在我们有了2个人,一个人是亚当,一个夏娃。

他们做点什么好呢?

历史的车轮总是不停的旋转,果不其然吃了苹果。



声明一下:

- (void)eatApple;


再实现一下:

- (void)eatApple
{
NSLog(@"他们竟然吃了苹果!!!!");
}


木已成舟。亚当和夏娃都吃掉了苹果有了人的智慧。那么是谁引诱的他们呢?

没错,是撒旦(satan)。让撒旦也登场吧。

<pre name="code" class="objc">@interface Snake : NSObject
{
NSString *_name;
}
- (void)setName:(NSString *)name;
@end

@implementation Snake
- (void)setName:(NSString *)name
{
_name = name;
}
@end



不能做无名蛇。

Snake *s = [Snake new];
[Snake setName:@"Satan"];


之后的故事我们也知道。亚当和夏娃“变聪明”之后,生下了两个孩子。名字分别是该隐(Gain)和亚伯 (Abel)。

在类里也有这种表示这种传承关系的代码,叫做“继承”。

@interface Child : Person
//冒号表示Child 继承自 Person
@end
@implementation Child
@end


由于继承了Person类,所以,CHild类一出现就具有了_name属性以及 setName 和 eatApple的方法,并不需要再声明或者实现。

这就是继承的力量啊!

Child *c1 = [Child new];
Child *c2 = [Child new];
[c1 setName:@"Gain"];
[c2 setName:@"abel"];
[c1 eatApple];


但是从圣经里知道,该隐和亚伯在出生后,并不安生,最后该隐杀掉了自己的亲兄弟亚伯。



摊手。果然子类也会有自己独特的“方法”啊。

- (void)kill
{
NSLog(@"该隐杀掉了亚伯! ");
}


子类Child,也就是c1,c2,在声明了自己的函数之后就可以直接调用了。

[c1 kill];
[c2 kill];


说完了西方的神话故事。再回到小时候我们看过的动画片《葫芦娃》!

这里可以使用分类(category)概念。

先创建一个葫芦兄弟的类吧 。



@interface Brothers : NSObject
- (void)sayMyName;
@end

@implementation Brothers
- (void)sayMyName
{
NSLog(@"我们是葫芦兄弟!")
}
@end


那么分类是怎么使用的呢?

回忆一下,是不是每一个葫芦娃都有自己的本领呢?这就是分类的概念了。

@interface Brothers (1st)
- (void)qianLiYan;
@end
@implementation Brothers (1st)
- (void)qianLiYan
{
NSLog(@"千里眼!");
}
@end
@interface Brothers (2nd)
- (void)shunFengEr;
@end
@implementation Brothers (2nd)
- (void)shunFengEr
{
NSLog(@"顺风耳!");
}
@end


有了通俗的例子之后,理解分类应该容易很多了。

严格的说,分类的作用就是不改变类原有代码的基础上,为类添加一些方法,也只能添加方法,并不能添加成员变量。作为同一个类,分类可以访问原类声明中的成员变量。

分类的优先级很高,如果在分类中重新实现了一个原类的方法,那么使用的时候会优先调用分类。

说起方法调用的优先级:“分类 > 类 > 父类”。也就是说,在分类能找到的方法,编译器不会再去其他地方寻找。若寻找不到,则去原类或者父类甚至父类的父类中去寻找。

搜索

复制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: