黑马程序员——Objective--C笔记之封装 继承 多态

来源:互联网 发布:北大医学部知乎 编辑:程序博客网 时间:2024/05/29 18:36
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一.封装:

1. 封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,当我们在定义时,可以把一些不想暴露的东西通过修饰符     来完成。

2.不封装的缺点:当一个类把自己的属性暴露给外部的时候,那么该类就失去对属性的管理权 

3.OC语言中,使用@interface@implementation来处理类。 

4.原理:实例变量默认只能被当前类的对象方法访问

5.封装的实现步骤:定义设置实例变量(setter)方法和访问实例变量(getter)的方法 

1).set作用:

(1)不让数据暴露在外,保证了数据的安全性

(2)对设置的数据进行过滤 

命名规范:

(1).方法名必须以set开头
(2).Set后面跟上成员变量的名称,首字母大写
(3).一定是void开头

(4).一定要接收一个参数,而且参数类型需要和成员变量的类型一致

(5).形参名不能和成员变量名一样

2).Get方法的作用:为调用者返回对象内部的成员变量

命名规范:

(1).一定有返回值,返回值的类型和成员变量的类型一致

(2).方法名和成员变量名一样

(3).不需要接收任何参数 

3.点语法

1).点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。切记点语法的本质是转换成相应的setget方法,如果没有setget方法,则不能使用点语法,于这个点语法代表的是get方法还是set方法,那就取决于你是取值还是设值 

2).把原来的[st setAge:10]替换成了st . age = 10 ,st.age并不是代表直接访问st对象的成员变量age,而是编译器遇到st.age = 10的时候会自动将代码       展开成[st setAge:10] 

3).set、get方法使用不当造成死循环

(1).-(void)setAge:(int)age{

         [self . age= age];

}

展开:

-(void)setAge:(int)age{

         [selfsetAge: age];

2).在get方法中,return self.age;相当于是[self age]; 

Animal.h


Animal.m


main.m


4.@property 

1).@property 告诉编译器声明属性的访问器(getter/setter)方法 

2).格式:@property类型 方法名 

例:@property int age; 

相当于进行了age的set和get方法的声明 

3).@property使用注意

(1).@property只能写在@interface@end中,@property用来自动生成成员变量的get/set方法声明

(2).(xcode4.4以前)告诉property要生成的get/set方法声明的成员变量类型是什么

(3).@property要生成的get/set方法是哪个属性的,属性名称去掉下划线 

5.@synthesize用法 

1).@synthesize是在m文件中定义set和get方法的实现。 

2).步骤:

(1).先定义变量 int age;

(2).使用@propertyage;声明方法 

(3).使用@synthesizeage;实现方法 

6.@property和@synthesize搭配使用,用于简化set和get方法的定义和实现 

7.@property增强

1.xcode4.4以后property做了增强帮助我们自动生成get/set方法的声明帮助我们自动生成get/set方法的实现 

2.@property手动实现

1)如果手动实现了set方法,那么编译器就只生成get方法和成员变量;

2)如果手动实现了get方法,那么编译器就只生成set方法和成员变量;

3)如果setget方法都是手动实现的,那么编译器将不会生成成员变量,并且报错

Person.h


Person.m


main.m




 二.继承

1.动物和狗有相同的特征比如跑,就可以说狗继承了动物的所有特征,也就是狗继承了动物,而动物就是父类,狗就是子类,也是派生类

2.继承的注意:

1).子类不能定义和父类同名的变量,但是可以继承父类的变量 

2)OC类支持单一继承,不支持多继承 

3)OC类支持多层继承 

三.多态

1.多态的概念:不同对象以自己的方式响应父类同名的方法,这就是多态

2.父类指针指向子类的对象

3.多态的条件:

1).有继承关系

2).子类重写父类的同名方法

Animal.h


Animal.m


Dog.h


Dog.m


main.m

4.多态的原理:

动态绑定:动态类型能使程序直到执行时才确定对象所属类型和要对对象调用的实际方法,OC不同于传统程序设计语言,它可以再运行时加入新的数据类型和新的程序模块:动态类型识别,动态绑定,动态加载

5.多态的注意:

1).如果存在多态,父类是可以访问子类特有的方法

2).如果不存在多态,父类是不可以访问子类特有的方法的 

0 0