您的位置:首页 > 移动开发 > Objective-C

object-c中多态

2016-05-10 16:23 381 查看
object-c指针类型的变量有两个:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定,如果编译时类型和运行时类型不一致,就会出现多态。

子类是一种特殊的父类,object-c允许把一个子类对象直接复制给一个父类指针类型,无需任何类型转换。

父类* a=[[子类 alloc] init];

#import <Foundation/Foundation.h>

@interface Base:NSObject;

-(void) base;

-(void) test;

@end

#import <Foundation/Foundation.h>

#import "Base.h"

@implementation Base

-(void) base{}

-(void)test{}

@end

#import <Foundation/Foundation.h>

#import “Base.h”

@interface Subclass:Base

-(void) sub;

@end

#import<Foundation/Foundatation.h>

#import "Subclass.h"

int main(int arg,char*argv[]){

Base base=[[Base alloc] init];

[base base];

[base test];

Subclass* sub=[[Subclass alloc] init];

[sub base];

[sub test];

[sub sub]

//多态

Base* base1=[[Subclass alloc] init];

[base1 base];

[base1 test];

base1不可调用sub方法,因为其实Base对象,base没有这方法;

//多态2

id d=base1;

[d sub];

}

备注:id类型的变量可以被赋值为任意类型的对象或者任意类型的指针变量,而且使用id类型的变量可以调用该变量实际所指对象的方法

指针类型的强制类型转换

在object-C程序中,除了id类型的变量外,指针变量只能调用其编译时类型的方法,而不能调用其运行时类型的方法,即使其实际所指对象包含该方法,如果需要让这个指针变量调用其运行时类型的方法,必须强制转化编译时类型为运行时类型。方法和Java类型(子类型*)父类对象

NSObject* obj=@"hello";

NSString* s=(NSString*)obj;

判断指针变量的实际类型

-(BOOL)isMenberOfClass:class  判断该对象是否为class类的实例

-(BOOL)idKindOfClass:class 判断该对象是否为class类或者其子类的实例

+(BOOL)isSubclaaOfClass:clazz: 类方法  用以判断当前对象是否为class类子类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: