黑马程序员-OC学习笔记-----封装、继承、多态
2015-03-13 10:35
549 查看
封装
封装是把数据和数据操作的实现细节隐藏起来,对外公开接口。这样可以让使用者更加方便,不用过多的去考虑实现细节。我们在封装的过程中也要尽量避免使用@public,这样会破坏类的封装性,我们尽量的把实例变量声明成保护或者私有类型,然后提供相应的设置和访问方法。继承
一个新的类可以从现有的类中派生出来这个过程称为继承。生成的新的类我们称为子类,原来的类就被叫做父类或者超类。父类相对子类更加抽象,父类一般是子类的共性的集合,子类比父类更具体,是父类的延伸。
在OC中有基类NSObject,所有的类基本都有继承自基类的方法和属性。但是值得注意的是,在OC中没有多继承,这样我们也不用去考虑多继承带来的二义性了。也少了严格意思上的方法重载。
继承的例子:
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject { char *_name; } -(void)setName:name; -(char*)name; -(void)run; @end
Person.m
#import "Person.h" @implementation Person -(void)setName:(char *)name { _name = name; } -(char*)name { return _name; } -(void)run { NSLog(@"%s runing",_name); } @end
Student.h
#import "Person.h" @interface Student : Person @end
Student.m
#import "Student.h" @implementation Student @end
main.m
#import <Foundation/Foundation.h> #import "Person.h" #import "Student.h" int main() { Student *p = [[Student alloc] init]; char *name = "tom"; [p setName:name]; [p run]; NSLog(@"%s run",[p name]); return 0; }
运行结果:
在上面的例子里面,创建了两个类,子类没有写方法和实例变量,但是通过继承了父类,可以调用父类的所有的方法和成员变量。但是要注意的是当实例变量声明为私有时,我们不能直接调用,而要通过方法来条用。
多态
多态指的是程序在运行的时候会有很多种表现形态。发生多态的条件是前提是有继承。在使用多态是,会进行动态检测,以调用真实的对象方法。多态在代码中的体现即父类指针指向子类对象。多态可以节省很多代码,可以提高代码复用,并且可以调用我们以后新增的类的方法。它的实现在归功于动态绑定机制,而不是函数运行时就把对象类型确定死了。父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。
多态的例子:
Animal.h
#import <Foundation/Foundation.h> @interface Animal : NSObject -(void)eat; @endAnimal.m
#import "Animal.h" @implementation Animal -(void)eat { NSLog(@"animal is eating"); } @endDog.h
#import "Animal.h" @interface Dog : Animal @endDog.m
#import "Dog.h" @implementation Dog -(void)eat { NSLog(@"Dog is eating"); } @endCat.h
#import "Animal.h" @interface Cat : Animal @endCat.m
#import "Cat.h" @implementation Cat -(void)eat { NSLog(@"cat is eating"); } @endmain.m
#import <Foundation/Foundation.h> #import "Animal.h" #import "Dog.h" #import "Cat.h" void fun(Animal *p) { [p eat]; } int main() { Dog *d = [Dog new]; Cat *c = [Cat new]; fun(d); fun(c); return 0; }运行结果:
相关文章推荐
- 黑马程序员_OC学习之封装、继承、多态、组合
- 黑马程序员-------面向对象的封装、继承、多态一些学习笔记
- 黑马程序员_OC学习之封装,继承,多态
- 黑马程序员——OC基础学习(四)---封装,继承和多态的学习知识总结
- 黑马程序员--IOS学习笔记(封装、继承、多态)
- 黑马程序员java学习笔记——面向对象的特征封装、继承和多态
- OC学习笔记02-OC中的面向对象语法表现 - 封装 继承与多态
- 黑马程序员——OC语言学习——OC面向对象的三大特性:封装、继承、多态,OC字符串——NSString
- 黑马程序员——OC学习——封装、继承、多态
- 黑马程序员——OC笔记之面向对象三大特征(封装、继承、多态)
- 黑马程序员——OC学习小结------封装,继承,多态
- 【Objective-C学习笔记】OC三大特性:封装、继承、多态
- 黑马程序员--OC--封装、继承、多态
- OC学习篇之---类的三大特性(封装,继承,多态)
- 黑马程序员---OC面向对象三大特性(封装、继承、多态)
- 黑马程序员_iOS开发之OC之面向对象之三大特性封装、继承和多态
- 黑马程序员——OC面向对象三大特性——封装,继承,多态。
- 黑马程序员——OC中的封装、继承和多态
- OC学习篇之---类的三大特性(封装,继承,多态)
- 黑马程序员——自学笔记6(封装、继承和多态)