object-c中多态

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类子类。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值