2 xh410117 xh410117 于 2016.04.05 16:47 提问

Objective-c重写问题,求指点

oc中的重写是怎样的呢?
子类继承了父类,然后重写父类的方法,父类里的方法没有被覆盖掉啊

//这是第一个类
 @interface Person : NSObject
 - (void)work;
 @end

 @inplementation Person
 - (void)work
 {
     NSLog(@"工作");
 }

 //这是第二个类
 @interface Student : Person
 @end

 @implementation Student
 - (void)work
 {
NSLog(@"该休息了");
}
@end

//main函数
int main()
{
        Person *p = [[Person alloc] init];
        [p work];//这一行打印出的是父类方法,是“工作”
        Student *s = [[Student alloc] init];
        [s work];//这一行打印出来的就是重写后的方法,是“该休息了”
        [p work]//这一行打印出来还是父类的“工作“啊,没有被覆盖为”该休息了“,
        //我就想问,[s work];这一行运行过后,父类里面的NSLog照样还是“工作”啊,并没有被覆盖为"该休息了'
}

1个回答

u013346305
u013346305   2016.04.05 17:02
已采纳

子类继承自父类,拥有work方法,重写会覆盖父类的方法,但,这边的覆盖只是针对子类而言,父类并不会被改变。父类可以有很多个子类,子类只能有一个父类。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Objective-C 重写set方法
#pragma mark 重写Model的setter方法, 来给当前单元格上的子视 图赋值 在set方法里给单元格的子视图赋值, contact是UITableViewCell的一个属性, contact在初始化时是没有值的, 需要在创建单元格的同时给self. contact赋值, 这时保证self.contact是有值的, 有值的同时也就是set方法中, 将contact的值进行处理, 保
【深入浅出Objective-C】4.4类的继承和重写
继承自4.3的Weapon类 #import "Weapon.h" #import //继承 @interface Sword : Weapon{ //子类新增的属性 NSColor *_colorBody;//剑身颜色 NSString *_materialBody;//剑身材质 NSColor *_colorSheath;//剑鞘颜色
Objective-c - 构造方法(init方法)和init方法的重写
/*    1> 创建一个对象,那么就调用这个类的new方法.    2> new方法是一个类方法,new方法做的事情:     1>在堆区开辟空间存储对象,这个对象中会声明它对应的类中定义的所有属性(注意是属性,没有方法),还有一个isa指针,指向对应的在代码区中的类     2>初始化这个对象内部属性的值         1,基本数据类型初始化为:0
iOS Objective-C 重写 setter 方法
ARC的时候直接赋值就可以了 - (void)setObject:(NSObject *)object   // retain {     if (_object == object) {         return;     }     [_object release];       _object = [object retain];   } - (voi
Objective-C 【构造方法(重写、场景、自定义)、super】
——————————————————————————————————————————— super关键字的使用 #import @interface Animal : NSObject -(void)run; -(void)eat; //+(void)eat; @end @implementation Animal -(void)run {     NSLog(
Objective-C学习笔记(二十二)——初始化方法init的重写与自定义
初学OC,对init这个方法不是很了解。我们现在来分别对init方法进行重写以及自定义,来加深对他的了解。本例子也是用Person类来进行测试。 (一)重写init方法。 (1)在Person.h中声明init方法: -(instancetype)init; (2)在Person.m中声明成员变量,以及写一个打印成员变量的函数,并且重写init初始化方法:在重写的方法中,对成员变量进行了赋
Objective-C之重载、重写、覆盖
相信很多读者学过另一门面向对象的语言——java,在java中重载、重写、覆盖说的是一回事 但是在咱们Objective-C里面,只能另当别论了。 不过要说明的是,这方面也是仁者见仁,智者见智,也有观点认为OC中这三个也是一回事。 OC中方法不能重载,原因是OC中不能出现方法同名,这里所说的方法名指的是- (void)eatWithFood:这样的。 按照参数维度分析,下面分两种情况说明:
学习笔记(objective-c)-重写description方法
description方法是一个自我描述的方法。主要是告诉外界该对象所具有的状态信息。 NSObject所提供的description方法一般返回,想实现自我描述,必须重写该方法。 例:  #import @interface APPLEAnimal : NSObject @property (nonatomic,copy) NSString* name; -(id) initW
Objective-C中方法的重写
Objective-C中的方法分两种:一、类方法()
【Objective-C编程开发】关于子类重写父类初始化方法的争论
写出本篇文章实属不是我的本意,只因今天在相关技术群上有两个人争得耳红眼赤.今天趁着有空写出这个基础性内容,希望能帮到有些新手的疑惑。 观点A:认为在子类重写的init中没有必要进行self =[super init]父类的初始化、每个子类可以不依靠父类单独进行实例化子类,这样也不会影响到他对父类除了私有属性私有方法外的其他内容的调用。 观点B:一定要在子类重写init中进行父类初始化成功的判断