oc面向对象-封装,继承,多态的用法

面向对象的三大特征

— 封装 (Encapsulation)

— 继承 (Inheritance)

— 多态 (Polymorphism) 

一,封装

1.信息隐藏,隐藏对象的实现细节,不让用户看到。

2.将东西包装在一起,然后以新的完整形式呈现出来。

3.对象同时具有属性和方法两项特性,对象的属性和方法通常被封装在一起,共同体现事物的特性,,二者相辅相承,不能分割 。

4.OC中也有四种访问权限修饰符:@public、@protected、@private、@package。

    private:私有成员,不能被外部函数访问(使用),也不能被子类继承;

  protected:保护成员,不能被外部函数访问,可以被子类继承;

  public:公有成员,可以被外部函数访问,也可以被子类继承。

  OC中,所有的方法(消息),都是公有的

 

二,继承

1.定义一个通用的类,它有基本的实例变量。子类可以 继承了该类,就可以拥有这些实例变量。子类也可以 定义自己的实例变量。

2.被继承的类叫超类或父类(superclass ),继承超类 的类叫子类或派生类(subclass )。

3.OC中继承的语法规则为: @interface 子类 :父类 。

4. OC语言是单继承语言。在OC语言中,基本上所有类的根类都是NSObject类。

举例:请编码实现动物世界的继承关系

· 动物(Animal)具有行为:吃(eat)、睡觉(sleep)

· 动物包括:兔子(Rabbit),老虎(Tiger)
· 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的 

//定义一个Animal类

#import <Foundation/Foundation.h>

@interface Animal : NSObject
//定义两个方法
- (void)eat;//吃
- (void)sleep;//睡觉

@end

#import "Animal.h"

@implementation Animal
//两个方法实现
- (void)eat{
    NSLog(@"进食");
}
- (void)sleep{
    NSLog(@"睡觉");
}
@end

//定义一个Rabbit

@interface Rabbit : Animal

@end

import "Rabbit.h"
@implementation Rabbit
//定义一个兔子子类,继承于动物这个父类(两个方法)
//重写eat这个方法
- (void)eat{
    NSLog(@"兔子吃草");
}

@end

 //定义一个Tiger

@interface Tiger : Animal

@end

#import "Tiger.h"

@implementation Tiger
//定义一个老虎子类,继承于动物这个父类(两个方法)
//重写这个方法
- (void)eat{
    NSLog(@"老虎吃肉");
}

@end

 //main

#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Rabbit.h"
#import "Tiger.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //兔子这个对象的初始化
        Rabbit *rabbit = [[Rabbit alloc]init];
        //调用自己重写的方法
        [rabbit eat];
        //调用父类的方法
        [rabbit sleep];
        
        Tiger *tiger = [[Tiger alloc]init];
        //调用自己重写的方法
        [tiger eat];
        //调用父类的方法
        [tiger sleep];
        
        
            }
    return 0;
}

 三.多态

1.多态是指同一种类型,具有多种表现形态。

2.多态的条件

 必须存在继承关系。

 父类声明的变量指向子类对象。

 子类重写父类的方法。

例:乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin)。各种乐器的弹奏( play )方法各不相同。演奏家可以使用各种乐器。 

//Actor.h

//使用乐器演奏的方法  
- (void)playWithInstrument:(Instrument *)instrument; 

//Actor.m

//使用乐器演奏的方法  
- (void)playWithInstrument:(Instrument *)instrument {  
  
    [instrument play];  
      
}  

 //Instrument.h

@interface Instrument : NSObject  
  
//演奏  
- (void)play;

 //Instrument.m

//演奏  
- (void)play {  
  
    NSLog(@"乐器演奏");  
      
}  

 //Piano.m

//演奏  
- (void)play  
{  
      
    NSLog(@"钢琴演奏");  
      
}  

 //Violin.m

//演奏  
- (void)play {  
      
    NSLog(@"小提琴演奏");  
      
}  

 //main

#import <Foundation/Foundation.h>
#import "Piano.h"
#import "Actor.h"
#import "Violin.h"
#import "Instrument.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Actor  *actor1 = [[Violin alloc]init];
        [actor1 play];
        Actor  *actor2 = [[Piano alloc]init];
        [actor2 play];
          }
    return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


posted @ 2016-07-30 14:47  我的蜡笔小新  阅读(591)  评论(0编辑  收藏  举报