黑马程序员--OC的三大特性 封装 继承 多态

 -----------android培训、java培训、java学习型技术博客、期待与您交流!------------

                         -----------第一遍看,第二理解思路,第三遍练-----------     

《面向对象的三大特性》

1> 封装 2>组合 3>多态

  

一、封装:

为什么要封装:为了因为防止成员变量暴露 

什么是封装:提供一个可以给外界读取或者修改成员变量的方法

setter and getter

setter方法是给外界提供一个修改成员变量的方法

getter 是给外界提供一个读取成员变量的方法

命名规范:

set方法和get方法都是对象方法所以都是以 - 开头 只有对象可以调用

set方法的命名规范:因为是写入而不是读取,所以他就不需要有返回值 不需要返回值那么就不用设置返回类型 就用void

-(void)setAge:(int)age;

以set开头+变量名第一个字母大写:+变量类型+形参名

方法内部则是 将得到的相同类型的值通过形参负值给成员变量

如: _age = age;

set方法还有一个很好的作用就是过滤 如果你想给实例参数的值定义一个范围 

要求:定义一个年龄不能超过30岁的实例参数

- (void)setAge:(int)age

{

if(age >30)//这里就是过滤 如果超过30岁就修改为30

{

age = 30

}

_age = age;

}


get方法因为有返回值 所以根据成员变量的类型来定义返回值的类型 以-开头括号里写入返回值类型形参名定义为

变量名不加_下划线 内部则是通过renturn 直接返回成员变量的值

如:

-(int)age

{

return _age;

}




self 

self 是一个指针 ,他代表调用方法者的本身 ,他使用在方法内部, 类或者对象,谁调用他 他就代表谁


self 使用唯一注意点就是, 在A方法中 不能使用self调用A方法 会导致死循环


二、继承:

继承,代表两个类之间的关系, 父类和子类

特点,子类继承父类的所有属性和方法,好处 抽取重复代码,建立了类之间的关系;

继承的格式:

@interface Student : Person      冒号前面是子类 后面是父类  也就是说 Student 是 Person 的子类 

Student 拥有Person 所有的属性和方法

注意点:1.子类不能创建和父类相同名称的实例变量  2. 子类重写父类的方法后,程序执行后会先到子类寻找方法

如果子类中存在和父类一样的方法 就会调用子类。


super 超级 代表父类的意思 他一般使用在继承中

他可以直掉调用父类中的某个方法 和self一样 super放在类方法中 代表类 放在对象方法中就代表对象

使用场合,当子类重写父类的方法 但是又想保留负累方法的时候 

标准例子是构造方法


- (id)init

{

if(self = [super init])//这里就是想保留父类的init方法

{

// 这里放一些初始化的实例变量值

}

return self;

}



多态:

多态是建立在继承的基础上 老师没讲的很细致唯一的作用就知道 当子类使用一个共同的函数时候

就使用多态,将父类放进函数中 那么子类 也可以调用导入函数中

如:

void eat(Person *p)

{

[p  eat];


}


Person *p = [[Student alloc ] init];

这样就叫多态 就可以传入到函数中 调用方法

注意点,首先要有继承,没有继承就没有多态 函数中调用的方法必须父类和子类同时拥有

限制;父类的指针式不能调用子类子类的方法的 例如

[p (sutdent)eat]的方法 这样是不行的

如果想调用必须 强制转换p为student指针

Student *s1 = (Student *)p;

[s1 eat]




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值