黑马程序员——【OC】面向对象的三大特性

来源:互联网 发布:linux复制为多个文件 编辑:程序博客网 时间:2024/06/11 14:21

------- android培训、java培训、IOS培训期待与您交流! ----------



OC 面向对象的三大特性:封装、继承、多态。

1.  封装

  set方法

 作用:提供一个方法给成员变量设置值, 并且还可以在方法里对参数进行过滤。

 命名规范:

 1>方法名必须以set开头     

2> set后面跟上成员变量名称,并且成员变量的首字母必须大写    

3>返回值一定是void

4>一定要接收一个参数,而且参数类型跟成员变量的类型一致

5>形参的名称不能跟成员变量名一样

注意:使用了set方法后,成员变量前尽量不要用@public

例子: - (void) setAge: (int )age {}  //这里简单的写了一个设置年龄的set方法的语句

 get方法

作用:返回对象内部的成员变量

命名规范:

1>一定有返回值,并且返回值类型与成员变量类型一致

2>方法名跟成员变量名一样

3>不接受任何参数

例子: - (int) age {} // 同样简单的写了一个返回年龄的get方法语句

△成员变量的命名规范

1>一定要以下划线 _ 开头   eg:int  _age;

2>要让成员变量名称与get方法的名称区分开

3>可以跟区部变量区分开(一看到下划线开头的变量,一般都是成员变量)

类方法与对象方法

两者的区别:

1> - 开头的是对象方法,+ 开头的是类方法

2> 对象方法只能由对象调用,类方法只能由类调用

3>对象方法能访问当前对象的成员变量,类方法中则不可以

注意:允许类方法和对象方法同名

类方法的好处和使用场合:

1>不依赖对象,执行效率高

2>能用类方法的情况下尽量使用类方法

3>场合:当类方法中不需要使用成员变量时

△self关键字

首先self是个指针,指向调用当前方法的对象

用途:

1>可以利用self ->成员变量名 来访问当前对象内部的成员变量

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

使用注意:合理使用self,否则会造成死循环

2. 继承

例如:@interface  A : B

{

}

上 面的例子就说明:类A继承了类B,同时A拥有了B里面所有的成员变量和方法。那么类B就称之为父类,类A 则为子类

好处:避免重复的代码,建立了类与类之间的联系

使用注意:

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

2>子类和父类不允许有相同的成员变量,且父类的声明放在子类的前面

3>例如 a对象调用run方法时 即[a sun],首先在子类中找,如果没有再去父类中找,如果还是没有继续往上找(可以理解为父类的父类)

继承的使用场合:

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

2>当A类完全拥有B类中的部分属性和方法时,可以考虑让B 类继承A类(并不是绝对的,还可以利用 组合)

△重写

定义:子类重新实现父类中的方法,会覆盖父类中的操作

缺点:耦合性太强(2个类之间的联系太密切)

组合和继承的区分:

可以简单理解为:

1>  XXX 是XXX 的时候可以使用继承(比如:狗(对象)是动物(对象))

2>  XXX拥有XXX的时候考虑使用组合(比如:一个圆(对象)拥有一个点(对象))

继承的关键字:super

简单示例:[super  run]   // 调用父类中的run方法 

作用:

1>直接调用父类中的某个方法

2>当super处在对象/类的方法中时,就会调用父类中的对象/类方法

使用场合:子类重写父类的方法时想保留一些父类的操作

3. 多态

多态即OC对象中拥有多种形态,多态必须是在继承的条件下使用的,不继承,无多态。

说明:

1>父类指针指向子类对象

2>调用方法时会自动检测对象的真实类型(这里为Dog对象)

好处:如果参数中使用的是父类类型,可以传入父类和子类的对象,节省了代码

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

例如:

Animal * a = [Dog new]; 

Dog *d = (Dog *)a;



0 0