定义一个父类FatherViewController 和一个子类SonViewController,其中子类继承父类。
@interface SonViewController : FatherViewController
父类与子类中都声明一个外部方法doSomething,如下:
子类:
@interface SonViewController : FatherViewController
-(void) doSomething;
@end
方法实现:
-(void) doSomething
{
NSLog(@"this is son funtion....");
}
父类:
@interface FatherViewController : UIViewController
-(void) doSomething;
@end
方法实现:
-(void) doSomething
{
NSLog(@"this is father function....");
}
1、正常的实例化调用场景:
我们在另一个类中分别实例化它们,并调用如下:
SonViewController *sVC1 = [[SonViewController alloc]init];
[sVC1 doSomething];
FatherViewController *fVC2 = [[FatherViewController alloc]init];
[fVC2 doSomething];
打印的结果如下:
2018-04-22 20:50:54.775 Banksy[10645:203402] this is son funtion....
2018-04-22 20:50:54.775 Banksy[10645:203402] this is father function....
2、子类中调用自己的方法以及父类的方法场景:
实例化子类,并在子类的init方法中,调用自己和父类的方法,如下:
-(instancetype)init
{
self = [super init];
[self doSomething]; //如果子类中没有doSomething方法的实现,那么这时就会调用父类的
[super doSomething];
return self;
}
打印结果如下:
2018-04-22 20:53:57.617 Banksy[10700:205200] this is son funtion....
2018-04-22 20:53:57.617 Banksy[10700:205200] this is father function....
3、父类调用子类的方法的场景:
此时若实例化了子类,而在父类中的init方法中会调用的doSomething方法,父类调用方式如下:
- (instancetype)init
{
self = [super init];
[self doSomething];
return self;
}
打印结果如下:
2018-04-22 20:57:17.329 Banksy[10754:206797] this is son funtion....
此时的[self doSomething],调用的是子类的方法,因为此时的self为SonViewController,
网友评论