c 子类重写父类方法为什么要重写object类的toString方法

你的位置: >
> iOS重写父类中的方法时要先调用父类中的方法的原因
现有两个类:
1.Object001继承自NSObject
#import &Foundation/Foundation.h&
@interface Object001 : NSObject
//Object001的头文件,我只是在这里面声明了个方法
-(void)printfS
#import &Object001.h&
@implementation Object001
//Object001的实现文件,我实现了声明的printfString方法,这个方法的作用是在控制台上打印Object001字符串
-(void)printfString
NSLog(@&Object001&);
2.Object002继承自Object001
#import &Object001.h&
@interface Object002 : Object001
#import &Object002.h&
@implementation Object002
-(void)printfString
[super printfString];
Object002的对象先不调用Object002父类中的方法
NSLog(@&Object002&);
#import &ViewController.h&
#import &Object002.h&
@implementation ViewController
//ViewController 实现
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
Object002 *object002 = [Object002 new];
[object002 printfString];
控制台打印如下信息:
然后在Object002类中调用父类中的方法再运行一次,控制台打印如下信息:
对比一下就可以知道:在子类中重写父类中的方法,如果不调用父类中的方法,那么就不执行父类中的方法,就像重新写了个名字一样的方法把父类中的方法覆盖掉了一样。
举个例子:在下面两个非常常用的方法中,如果不用父类指针调用父类中的方法也能运行成功,只是这个对象少了一些行为而已,所以当重写父类中的方法时一定要先用父类指针(super)调用一下父类中的方法。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
-(void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
转载时请注明出处及相应链接,本文永久地址:/15187.html
支付宝打赏
感谢您对作者Kerwin的打赏,我们会更加努力!&&&&如果您想成为作者,
与本文相关的文章其他回答(2)
类只是创建对象的模板,不管怎么继承创建的对象只有一个。
toString返回的@后面是对象的hashcode,内容(值)相同的对象hashcode相同。
园豆:4853
园豆:4853
其实是调用了父类的toString()方法,而父类的toString()方法调用的hashcode是子类的
&&&您需要以后才能回答,未注册用户请先。安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&

我要回帖

更多关于 子类重写父类方法 的文章

 

随机推荐