Objective c类的初始化

Objective c中实现类的初始化要先重载父类的init方法:

1.首先调用[super init]使用父类的方法进行初始化,将对象赋给self

2.如果self不为nil即父类初始化成功,接着进行本类的初始化

3.返回self给调用者

@implementation Test
-(id)init
{
    if(self = [super init])
    {
        //本类的初始化代码
        //.......... 
    }
    return self;
    
}
@end


————————————————————————————————————————————————————————————————————————————

虚方法

1.调用时不看指针看对象,称为虚方法

2.OC中所有的方法都是虚方法

3.父类的指针可以指向子类对象


有两个类
card1.h
@interface Card1 : NSObject
{
    int money;
}
@property (nonatomic,assign) int money;

-(void)printAccount;

card2.h
@interface Card2 : Card1

- (void)printAccount;
@end

在main.m中

Card2 *card2=[[Card2 alloc] init];
card2.money=1000;
Card1 *card1=card2;
[card1 printAccount];

//父类指针指向子类对象,实际上仍然时调用子类card2中的打印方法,因为card1指针指向card2对象


这一点与C++里面也是很类似的,OC中所有的对象都是通过指针来访问的。这些指针对象拥有编译时类型和运行时类型。

编译时类型是静态类型,在编译阶段编译器只是做简单地类型检查,宏替换,导入头文件等动作,与声明它时候的定义相关;运行时类型是动态类型,与它实际所指向的实例变量的类型有关,程序执行时才知道的类型。

编译器在编译阶段时会进行语法检查,因此虽然当父类指针指向子类的对象时,父类的.h声明文件中未声明的方法均不能直接调用,只能通过OC的反射机制来访问,如通过performSelector:@selector(SEL)来访问,但编译器此时还是会有警告的。此时调用执行的均为子类的方法。当且仅当这个方法在子类中没有实现时才会调用父类自己的方法。


       
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值