OC多态

Object-C技术学习,更多资源请访问 https://www.itkc8.com

//  main.m

//  多态

//

//  Created by Goddog on 15/1/8.

//  Copyright (c) 2015年 Goddog. All rights reserved.

//

/*

 1.OC指针类型的变量有两个:一个编译时的类型,一个是运行时的类型。编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。两者不一致就出现多态

 2.运行时调用该指针变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类的行为特征。

 3.指针在编译阶段只能调用其编译时类型所具有的方法,但在运行时则执行它运行时类型所具有的方法。

 4.解决编译类型检查问题,OC提供了一个id类型,程序可以对任何对象或任何类型的指针变量赋值为id类型的变量,而且使用id变量

    可以调用该变量实际所指向的方法。

 */

 

//
//  Man.h
//  多态
//
//  Created by Goddog on 15/1/8.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Man : NSObject
-(void) say;
-(void) see;
@end

 

//
//  Man.m
//  多态
//
//  Created by Goddog on 15/1/8.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import "Man.h"

@implementation Man
-(void) say
{
    NSLog(@"说");
}
-(void) see
{
    NSLog(@"看");
}
@end

 

//
//  SuperMan.h
//  多态
//
//  Created by Goddog on 15/1/8.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Man.h"

@interface SuperMan : Man
-(void) fly;
@end

 

//
//  SuperMan.m
//  多态
//
//  Created by Goddog on 15/1/8.
//  Copyright (c) 2015年 Goddog. All rights reserved.
//

#import "SuperMan.h"

@implementation SuperMan
-(void) say
{
    NSLog(@"超人覆盖了说");
}
-(void) fly
{
    NSLog(@"超人会飞");
}
@end

 

#import <Foundation/Foundation.h>
#import "SuperMan.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //编译时类型和运行时类型完全一样,非多态
        Man* man = [[Man alloc] init];
        [man say];
        [man see];
        
        //编译时类型和运行时类型完全一样,非多态
        SuperMan* superMan = [[SuperMan alloc] init];
        [superMan say];
        [superMan see];
        [superMan fly];
        
        //编译时类型和运行时类型不一样,多态
        Man* superManAndMan = [[SuperMan alloc] init];
        [superManAndMan say];
        [superManAndMan see];
        //[superManAndMan fly];//父类中无fly方法,故不能编译
        
        //可将任何类型的指针变量赋值给id类型的变量
        id mansuper = superManAndMan;
        [mansuper fly];
        
        
    }
    return 0;
}

Object-C技术学习,更多资源请访问 https://www.itkc8.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值