------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
继承OC中非常重要的内容之一,继承在现实生活中指获取父母的一切资源,在OC指子类获得父类的资源(实例变量和方法)
继承的好处是使代码的可重用性 提高,同时还建立了一种类和类的联系。
继承后子类A可以有父类B的方法和属性,如果父类B同时也是其他类C的子类,那么子类A也有C类的方法和属性,付过C类仍然有父类,那么子类A仍可继承到该类的属性和方法,一直继承到基类NSObject.
即 子类的方法和属性=子类自己独有的方法和属性+父类的方法和属性+爷爷类的方法和属性+...+基类的方法和属性
父类Animal的代码
<pre name="code" class="objc">#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
@private
NSString *haHaWoBuHuiBeiJiCheng;
}
@property(nonatomic,assign)int age;
-(void)eat:(NSString*)foodName;
-(void)run;
@end子类Dog
#import <Foundation/Foundation.h>
#import "Animal.h"
@interface Dog : Animal//以前这个位置是写基类NSObject,也就是继承NSObject类,现在我们继承自Animal,除了需要在中写继承类的名以外,还需引入父类的.h头文件
//子类自己的方法和属性
@end
如同父辈的财产未必会完全给子女一样,父类也并不是所有资源都会给子类。
父类的成员属性如果为
private:私有成员,可以被子类看见,不能被子类继承。
protected:保护成员,可以被子类继承。
public:公有成员,可以被子类继承。
父类的私有方法(只在.m文件实现,未在.h文件声明)也不能被子类继承
另:从子类往父类方向找,是一条单线,即一个类只能有一个父类,如果从父类往子类方向找,则可以有多条线,即一个类可以有多个子类,并且每个子类相互独立,可以有自己独有的属性和方法(类似于现实中我们只能有一个父亲,但我们却可以有很多子女)。
子类中不可以有和父类同名的属性,但可以有和父类同名的方法。
子类方法与父类方法同名即是方法的重写,子类重写父类的方法并不需要单独声明,只需要在.m文件中实现即可
重写之后,父类调用方法的时候调用的是自己的方法,子类调用重写方法的时候调用的是自己重写的方法,如果还想使用父类的方法,可以用super来调用父类的方法(重写 init方法的时候比用)。
Animal.m
#import "Animal.h"
@implementation Animal
-(void)eat{
NSLog(@"动物----->吃");
}
-(void)bark{
[self wocao];
NSLog(@"动物----->叫");
}
//私有方法,不会被子类继承
-(void)wocao{
NSLog(@"哈哈哈 HOHOhaheii");
}
@endDog.m
#import "Dog.h"
@implementation Dog
//重写父类的eat和bark方法
-(void)eat{
NSLog(@"狗----->吃");
}
-(void)bark{
NSLog(@"狗----->叫");
}
@end
类寻找方法,会先从自己找起,然后再找父类,爷爷类...基类直至报错
例如Dog的对象调用方法会先从自己的方法中找起,然后再到Animal类中找,最后到NSObject中找,这也是为什么一旦重写后,子类并不会调用父类的方法。
这篇博客探讨了Objective-C中的继承概念,包括继承如何提高代码复用性,子类如何获取父类的属性和方法,以及继承的单线性特点。文中详细解释了私有、保护和公共成员的继承规则,并强调了方法重写和`super`关键字的使用场景。通过实例展示了如何在子类中重写父类方法,并分析了方法调用的查找顺序。
600

被折叠的 条评论
为什么被折叠?



