黑马程序员__OC三大特性

三大特性

 

封装

 

封装是把成员变量包装起来,不让外界直接访问。根据成员变量的作用域,默认都是protect类型的。

 

set 和get方法

 

有时候我们必须要访问成员变量,但是成员变量被封装起来了,这时候我们就可以用set或者get方法来间接访问成员变量,这样可以确保数据的安全性

 

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Score : NSObject
 4 {
 5     int _cScore; // C语言成绩
 6     int _ocScore; // OC成绩
 7     
 8     int _totalScore;// 总分
 9     int _averageScoe; // 平均分
10 }
11 
12 - (void)setCScore:(int)cScore;
13 - (int)cScore;
14 
15 - (void)setOcScore:(int)ocScore;
16 - (int)ocScore;
17 
18 - (int)totalScore;
19 - (int)averageScore;
20 
21 @end
22 
23 @implementation Score
24 - (void)setCScore:(int)cScore
25 {
26     _cScore = cScore;
27     
28     // 计算总分
29     _totalScore = _cScore + _ocScore;
30     _averageScoe = _totalScore/2;
31 }
32 - (int)cScore
33 {
34     return _cScore;
35 }
36 
37 - (void)setOcScore:(int)ocScore
38 {
39     _ocScore = ocScore;
40     
41     // 计算总分
42     _totalScore = _cScore + _ocScore;
43     _averageScoe = _totalScore/2;
44 }
45 // 监听成员变量的改变
46 
47 - (int)ocScore
48 {
49     return _ocScore;
50 }
51 
52 - (int)totalScore
53 {
54     return _totalScore;
55 }
56 - (int)averageScore
57 {
58     return _averageScoe;
59 }
60 @end

说明:

 

1.get方法是返回成员变量的,所有返回类型和成员变量的类型是一样的

2.sef方法是访问成员变量的值,或者修改成员变量的值,没有返回值,所有用(void)

3.set和get都是对象方法,所有都应该用-号开头

4.如果一个类基本没有任何的成员变量,里面的方法都是类方法,我们成为工具类

5.经典错误:unrecognized selector sent to instance 0x7fd2ea4097c0  不能是识别的消息发送了某个对象,0x7fd2ea4097c0 表示对象的地址

 

 

继承

 

使用场合

 1> 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中

 2> 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承 A类

 

继承的好处:

 1> 抽取重复代码

 2> 建立了类之间的关系

 3> 子类可以拥有父类中的所有成员变量和方法

 

坏处:

子类和父类的耦合性太大

 

注意点

 1> 基本上所有类的根类是NSObject

 2>  重写:子类重新实现父类中的某个方法,覆盖父类以前的做法

 3> 父类必须声明在子类的前面

 4> 子类不能拥有和父类相同的成员变量

 5> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找

 

 

多态

 

定义:

 

多态指的是父类指针指向了子类对象

 

Dog *d = [Dog new]

Animal *a = [Dog new]

 

上面的例子中Dog是Animal的子类,对象a就是有多种形态,可以说是Dog类型的,也可以说是Animal内省的,调用方法时会检测对象的真实形象

 

说明

 1.没有继承就没有多态

 2.代码的体现:父类类型的指针指向子类对象

 3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象

 4.局限性:

  父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

 

补充 :self 和super

 

self:指向方法的调用者,代表着当期的对象,一般用在方法的实现中。如果用在对象方法中self就代表一个对象,如果用在类方法中,self就代表着一个类

 

在对象方法利用"self->成员变量名"访问当前对象内部的成员变量

 

[self 方法名]可以调用其他对象方法\类方法

 

super

 

作用;1直接调用父类的某个方法

       

    2.super处在对象方法中,那么就会调用父类的对象方法

      super处在类方法中,那么就会调用父类的类方法

 

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

posted @ 2014-10-06 16:38  jiaguolin  阅读(202)  评论(0编辑  收藏  举报