黑马程序员--IOS学习笔记(封装、继承、多态)
来源:互联网 发布:javascript主要用途 编辑:程序博客网 时间:2024/06/05 12:50
---------------------- <a href="http://www.itheima.com"target="blank">iOS开发</a>、期待与您交流! ----------------------
一、封装
* 封装是对象和类概念的主要特性。它是隐藏内部实现,稳定外部接口,可以看作是“包装”。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
* 封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。
* OC中一个类可以继承另一个类,被继承的类成为超类(super class),继承的类是子类(child class),可以直接拥有父类中所有非私有成员(相关实例变量)、方法。
* 继承的实现
* 属性封装了实例变量,方法封装了具体的实现代码, 类封装了属性和方法。子类可以继承父类中的方法,还可以重写(override)父类的方法。
* 好处:使用更加简单
二、继承
* 子类可以直接复用父类中的成员,子类继承父类所有方法的声明和实现, 非私有的实例变量以及协议继承是要在.h中声明一下,继承具有单根性和传递性,继承就是代码优化公共部分交给父类。
#import "Person.h"
@interface Student : Person
@end
#import "Person.h"
@interface Teacher : Person
@end
1. 继承的基本用法 (设计两个类Bird、Dog)// Bird的声明
@interface Bird :NSObject
{
@public
int weight;
}
- (void)eat;
@end
// Bird的定义
@implementation Bird
- (void)eat {
NSLog(@"吃吃吃-体重:%d",weight);
}
@end
// Dog的声明
@interface Dog :NSObject
{
@public
int weight;
}
- (void)eat;
@end
// Dog的定义
@implementation Dog
- (void)eat {
NSLog(@"吃吃吃-体重:%d",weight);
}
@end
有相同的属性和行为,抽出一个父类Animal(先抽取weight属性,再抽取eat方法)
// Animal的声明
@interface Animal : NSObject
{
@public
int weight;
}
- (void)eat;
@end
// Animal的定义
@implementationAnimal
- (void)eat{
NSLog(@"吃吃吃-体重:%d",weight);
}
@end
子类在父类的基础上拓充属性和方法
// Bird的声明
@interfaceBird : Animal
{
@public
intheight;
}
- (void)fly;
@end
// Bird的定义
@implementationBird
- (void)fly{
NSLog(@"飞飞飞-高度:%d",height);
}
@end
// Dog的声明
@interface Dog: Animal
{
@public
intspeed;
}
- (void)run;
@end
// Dog的定义
@implementation Dog
- (void)run{
NSLog(@"跑跑跑-高度:%d",speed);
}
@end
子类方法和属性的访问过程:如果子类没有,就去访问父类的
父类被继承了还是能照常使用的
NSObject的引出:全部OC类的最终父类,包含了一些常用方法,比如+new
* 继承的好处:1> 不改变原来模型的基础上,拓充方法
2> 建立了类与类之间的联系
3> 抽取了公共代码
* 坏处:耦合性强
2. 继承的使用场合
1> 它的所有属性都是你想要的,一般就继承
2> 它的部分属性是你想要的,可以抽取出另一个父类
三、多态
1. 多态的基本概念:某一事物的多种形态,OC对象具有多态性2. 多态的体现:
Person *p = [Student new];
p->age = 100;
[p walk];子类对象赋值给父类指针;父类指针访问对应的属性和方法;
3. 多态的好处: 不能访问子类的属性(可以考虑强制转换)
4. 多态的细节(动态绑定):在运行时根据对象的类型确定动态调用的方法
---------------------- <a href="http://www.itheima.com"target="blank">iOS开发</a>、期待与您交流! ----------------------
- 黑马程序员--IOS学习笔记(封装、继承、多态)
- 黑马程序员_java自学学习笔记(四)----封装、继承、多态
- 黑马程序员-OC学习笔记-----封装、继承、多态
- 黑马程序员-OC笔记(三)OC 封装 继承 多态
- 【黑马程序员】-我的OC学习笔记(2)-封装、继承、多态
- 黑马程序员——ios学习笔记 OC 封装&多态
- 黑马程序员 封装、继承、多态
- 黑马程序员Objective-C笔记:封装,继承,多态
- 黑马程序员-ios学习笔记 oc 封装
- 黑马程序员_OC学习之封装,继承,多态
- 黑马程序员_OC学习之封装、继承、多态、组合
- 黑马程序员—Objective-C学习—封装、继承、多态
- 黑马程序员-ios学习笔记 oc 继承
- 黑马程序员——ios学习笔记 OC 继承
- 黑马程序员——OC笔记之面向对象三大特征(封装、继承、多态)
- 黑马程序员学习日记 (四)面向对象三大特征: 封装 继承 多态
- 黑马程序员-面向对象(封装,继承,多态)
- 黑马程序员_Java面对对象(封装,继承,多态)
- Web验证码实现机制
- File 里面的flush()和close()
- jquery multiselect动态加option,需要调用refresh方法才能刷新option
- C++:sizeof问题
- SDUT3184 Fun House(模拟)
- 黑马程序员--IOS学习笔记(封装、继承、多态)
- KMP算法详解
- Python实用库收集
- openwrt lan wan配置
- 工作周报036
- oracle安装之check if the DISPLAY variable is set错误
- LoadRunner获取当前时间
- mvc框架初识
- Fish Li可供下载的资源列表