OC笔记15,16(#import#include的区别) 2.1(封装的概念)2.2(继承的概念)

来源:互联网 发布:美国下饺子知乎 编辑:程序博客网 时间:2024/06/06 19:03

笔记15是一个练习,一个类创建另两个类的对象,并调用另两个类的方法。



视频16:

#inport和#inclide的区别:

讲区别就先要清楚他们两个有什么功能

在OC语言里面#inport和#inclide都表示引用,举例:

创建h类,便有h.h和h.m文件,现类的实现文件引入类的声明文件,即h.m文件引入h.h文件

#inport和#inclide都可在h.m文件中引入h.h文件

区别:

#inclide没有重复判断功能,如果使用#inclide在h.m文件中重复导入h.h文件便出处了

#import有重复判断功能,如果使用#import在h.m文件中重复导入h.h没有问题,它会将其视为导入一个.h文件。




2.1封装的概念

有一个Car类,创建一个对象car,可以用car->属性 = **;方式给类的属性赋值。引用自http://blog.csdn.net/chenzufeng1314/article/details/22899363

封装基本概念

因为成员变量是public,也就是公开的,我们不能控制外界如何赋值

    外界有可能赋值一些脏数据

    可以利用封装来解决这个问题

   封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方法

因为成员变量是public的,也就是公开的,我们不能控制外界如何赋值

    外界有可能赋值一些脏数据

    可以利用封装来解决这个问题

    封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方法

所以我们可以利用  get/set来解决

给成员变量赋值的方法我们称之为set方法

获取成员变量的值的方法我们称之为get方法

set方法:

 1.一定是对象方法

 2.一定没有返回值

 3.方法名称一定以set开头,set后面跟上属性名称去掉下划线,并且首字母大写

 4.一定有参数参数类型一定和成员变量类型相同

5.参数名称一般是成员变量名称去掉下划线

get方法

 1.一定是对象方法

 2.一定有返回值类型,返回值类型和成员变量类型相同

 3.方法名称是成员变量名称去掉用下划线

4.一定没有参数

如果没有提供set方法的成员变量我们称之为只读属性, 也就是说只有get没有set

如果没有提供get方法的成员变量我们称之为只写属性, 也就是说只有set没有get

组合模式:

组合模式:组合模式就是在一个类中,声明类其他对象的指针变量(把其它对象声明为当前对象成员变量)

     组合模式就是一个"谁拥有谁"的一个概念

     如何判断组合模式是否合理谁拥有谁

     组合模式的优点:

     全局对象方法中都可以直接访问,简化了代码

     缺点:

     依赖性比较大

     组合模式的使用场景:

     当多个方法中都用到了同一个对象,那么就把他设置成成员变量

继承基本概念

 总结:

     基本概念:

     B类继承类A, B类就拥有类A类的成员变量和方法

     如何判断继承是否合理: is a XXX  XXX

     

     

     继承的好处:

     继承的出现提高类代码的复用性

     继承的出现让类与类之间产生类关系提供了多态的前提

     

     

     继承的坏处:

     耦合性太强

     

     继承中的注意点:

     >1.子类不能拥有和父类相同名称的成员变量

     >2.在继承中调用某个方法时,优先去当前类中查找,如果找不到再去父类中找

     >3.OC中只有单继承(只允许有一个父类),没有多继承(同时继承两个父类),但是支持多层继承

注意,在子类中不能有和父类中名称一模一样的成员变量

当子类当中编写类和父类当中一模一样的方法,我们称之为重写

继承中方法的调用顺序,会先在本类中找,如果本类中找不到再去父类中找

多态基本概念

总结:

     什么是多态:某一类事物的多种形态

     多态的前提:必须有继承关系

     表现形式:父类类型的指针指向子类对象

     

     多态的局限性:

     父类类型的指针不能用来调用之类类型的特有方法, 如果想调用子类特有方法必须进行强制类型转换

2. 多态的体现
Person *p = [Student new];
p->age = 100;
[p walk];
子类对象赋值给父类指针
父类指针访问对应的属性和方法

0 0
原创粉丝点击