OC继承
2013-09-29 16:36
176 查看
1、成员访问类型
private:私有成员,不能被外部函数访问(使用),也不能被子类继承;
protected:保护成员,不能被外部函数访问,可以被子类继承;
public:公有成员,可以被外部函数访问,也可以被子类继承。
OC中,所有的方法(消息),都是公有的。
2、重写(继承的另一部分)
子类可以从父类继承方法,但是有时候父类的方法不适合子类,子类就可以写一个自己的同名方法,覆盖掉父类的同名方法,叫做重写。
重写的时候,在子类的.h中不必重新声明,直接在.m中写实现就可以。
其中,子类重写父类的jump方法,不需要重新声明。
同一个方法,不同的实现,称为多态。重写是多态的一种。
继承的好处:
1)创建大量的相似类的时候,可以节省工作量。
2)使用框架中的类,或已经写好的类,继承该类,生成一个派生类,比原类更好用。
注意:NSString、NSArray、NSDictionary都是不能够继承的。
3、虚方法
OC的方法都是虚方法
1)父类的指针可以指向子类的对象
上面p和son都指向子类的对象;调用方法时,不看指针,看对象,对象的地址指向什么对象,就调用什么方法,称为虚方法。
2)调用方法时,不看指针看对象,这样的方法叫做虚方法。虚方法的好处:可以描述不同事物被相同事件触发,产生不同的响应(结果)。体会下面的例子
动物的父类声明与实现
子类(狗)的声明与实现
子类(猫)的声明与实现
人类的声明与实现
结题!!!
private:私有成员,不能被外部函数访问(使用),也不能被子类继承;
protected:保护成员,不能被外部函数访问,可以被子类继承;
public:公有成员,可以被外部函数访问,也可以被子类继承。
OC中,所有的方法(消息),都是公有的。
2、重写(继承的另一部分)
子类可以从父类继承方法,但是有时候父类的方法不适合子类,子类就可以写一个自己的同名方法,覆盖掉父类的同名方法,叫做重写。
重写的时候,在子类的.h中不必重新声明,直接在.m中写实现就可以。
//父类声明文件 #import <Foundation/Foundation.h> @interface Father : NSObject -(void)run; -(void)jump; @end //父类实现文件 #import "Father.h" @implementation Father -(void)run{ NSLog(@"he is running!"); return; } -(void)jump{ NSLog(@"father can jump 1.2m"); } @end
//子类声明文件 #import "Father.h" @interface Son : Father @end //子类实现文件 #import "Son.h" @implementation Son -(void)jump{ NSLog(@"he can jump 0.6m"); } @end
其中,子类重写父类的jump方法,不需要重新声明。
同一个方法,不同的实现,称为多态。重写是多态的一种。
继承的好处:
1)创建大量的相似类的时候,可以节省工作量。
2)使用框架中的类,或已经写好的类,继承该类,生成一个派生类,比原类更好用。
注意:NSString、NSArray、NSDictionary都是不能够继承的。
3、虚方法
OC的方法都是虚方法
1)父类的指针可以指向子类的对象
Son * son = [[Son alloc] init]; Father * p = son;
上面p和son都指向子类的对象;调用方法时,不看指针,看对象,对象的地址指向什么对象,就调用什么方法,称为虚方法。
2)调用方法时,不看指针看对象,这样的方法叫做虚方法。虚方法的好处:可以描述不同事物被相同事件触发,产生不同的响应(结果)。体会下面的例子
动物的父类声明与实现
//动物类声明 #import <Foundation/Foundation.h> @interface Animal : NSObject -(void)beBeaten; @end
//动物类实现 #import "Animal.h" @implementation Animal -(void)beBeaten{ return; //该方法需要子类实现,所以父类不需要写任何实现代码 } @end
子类(狗)的声明与实现
#import "Animal.h" @interface Dog : Animal @end
#import "Dog.h" @implementation Dog //该方法在父类已经声明,所以子类不需要重复声明 -(void)beBeaten{ NSLog(@"wang,wang..."); } @end
子类(猫)的声明与实现
#import "Animal.h" @interface Cat : Animal @end
#import "Cat.h" @implementation Cat //该方法在父类已经声明,所以子类不需要重复声明 -(void)beBeaten{ NSLog(@"miao,miao..."); } @end
人类的声明与实现
#import <Foundation/Foundation.h> #import "Animal.h" @interface Human : NSObject //调用该方法,此处只写一个父类的指针就可以,这是利用了父类的虚方法; //不然,需要写多个方法实现:beatAnimal:(Dog *)dog;beatAnimal:(Cat *)cat;打不同的动物需要传不同的对象,所以利用虚方法、父类的指针是非常方便的 -(void)beatAnimal:(Animal*)animal; @end
#import "Human.h" @implementation Human -(void)beatAnimal:(id)animal{ NSLog(@"Human beat the %@",[animal class]); [animal beBeaten]; } @end
Dog * dog = [[Dog alloc] init]; Cat * cat = [[Cat alloc] init]; Human * xiaoming = [[Human alloc] init]; [xiaoming beatAnimal:dog]; [xiaoming beatAnimal:cat]; //输出: //2013-09-29 15:51:00.604 OC[752:303] Human beat the Dog //2013-09-29 15:51:00.619 OC[752:303] wang,wang... //2013-09-29 15:51:00.620 OC[752:303] Human beat the Cat //2013-09-29 15:51:00.621 OC[752:303] miao,miao...
结题!!!
相关文章推荐
- iOS基础(oc)-继承
- OC中protocol、category和继承的关系--转
- OC语言---封装,继承,多态
- oc中protocol、category和继承的区别
- oc继承
- OC 中类的继承
- OC学习:OC_中基本数据类型和结构体的封装(NSNumber继承与NSValue)
- OC学习篇之---类的三大特性(封装,继承,多态)
- OC - 第三章 继承、初始化方法、便利构造器
- OC中protocol、category和继承的区别
- oc中少见的不继承于NSObject 的类NSProxy?
- oc中少见的不继承于NSObject 的类NSProxy?
- OC--继承的相关特性
- OC基础—三大特性之继承
- OC基础初始化方法,Set get方法,继承父类
- OC基础——封装、继承、多态
- IOS开发---OC语言-⑨继承、组合、super
- 黑马程序员---成长之路-----OC之基础篇类的继承和派生
- 黑马程序员-OC之面向对象的三大特性:封装、继承和多态
- OC温故:面向对象的三大特性(封装,继承,多态)