- 面向对象三大特征:封装、继承、多态。
- 封装
1).作用:隐藏内部的实现,文档外部接口,封装就是定义类 定义属性 定义方法。
2).实现方法:
a.使用@interface和@implementation来处理类,@interface 是像定义在外边的钟表表面,向外界提供展示及接口。@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装起来。
b.一般一般不用@public、@protected等关键词修饰,而是直接使用set方法来为对象提供变量的值,可以实现对不合理的赋值进行筛选;用get方法给对象返回值
3).set使用及注意:
a.作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
b.命名规范:
1>方法名必须以set开头
2>set后面跟上成员变量的名称,成员变量一般以“_”开头,此时set后边不必加“_”,只需要加下划线之后的名称就行,而且成员变量首字母必须大写
3>返回值一定是void
4>一定要接受一个参数,而且参数类型跟成员变量类型一致
5>定义的形参不能和成员变量名一样
4).get的使用及注意
a.作用:返回对象内部的成员变量
b.命名规范:
1>肯定有返回值,返回值类型和成员变量类型一样
2>方法名跟成员变量名一样,一般成员变量一般以“_”开头,此时get方法后面一定要加上”_”。
3>不需要任何参数 - 继承
1).作用:子类继承了父类同样就拥有了父类所有的方法和属性(成员变量)。
2).继承的优点和缺点:
a.优点:
1>抽取出了重复的代码;
2>建立了类和类之间的关系
3>子类可以拥有父类中得所有成员变量和方法
b.缺点:耦合性太强
3).继承的实现:
注意:OC语言是单继承语言。在oc语言中,基本上所有类的根类都是NSObject类。@interface Animal:NSObject //动物里继承了NSObject,获得NSObject类的方法; @end @interface Dog :Animal //dog类继承Animal类 @end
4).继承使用注意:
a.父类必须声明在子类前面;
b.不允许子类和父类拥有相同的成员变量;
c.调用某个方法时,优先去当前对象中找,如果找不到,去父类中找;
d.每个类里面都有superclass指针,都指向父类。
5).继承和组合
a.继承的适用场合:
1>当两个类拥有相同的属性和方法时,就可以将相同的属性和方法抽取到一个父类中;
2>当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类(考虑),在这种情况下,也可以考虑使用组合。
b.区分技巧:
继承:###是xxx,如狗是动物,可以让狗继承动物类;
组合:###拥有xxx,如人有手机,可以让手机这个类作为人类的属性,而不能使用继承。
6).super关键字
a.super作用:
1>直接调用父类的某个方法;
2>super处在对象方法中,就会调用父类的对象方法;super处于类方法中,就会调用父类的类方法。
b.super使用场合:子类重写父类的方法时想保留父类的一些行为。 - 多态
1).基本概念:多态就是多种形态,没有继承就没有多态。
2).代码体现:多态就是父类指针指向子类对象。
3).使用场合:如果函数或方法参数中使用的是父类类型,可以传入父类、子类对象。
4).多态局限性
1>父类类型的变量不能直接调用子类特有的方法。
2>如果必须要调用子类的方法,必须强制转换为子类类型变量后,才能直接调用子类特有的方法。 - 对象方法和类方法的区别:
1).对象方法:
a.减号开头;
b.只能由对象来调用;
c.对象方法中能访问当前对象的成员变量。
2).类方法:
a.加号开头;
b.只能由类来调用;
c类方法中不能访问成员变量。
- 类方法
1).使用场合:
a.不依赖于对象,执行效率高;
b.能用类方法尽量用类方法。
2).使用注意:可以允许类方法和对象方法同名。
3).工具类:没有任何成员变量,而且里面的方法基本都是类方法。