黑马程序员——OC基础---继承

这篇博客探讨了Objective-C中的继承概念,包括继承如何提高代码复用性,子类如何获取父类的属性和方法,以及继承的单线性特点。文中详细解释了私有、保护和公共成员的继承规则,并强调了方法重写和`super`关键字的使用场景。通过实例展示了如何在子类中重写父类方法,并分析了方法调用的查找顺序。

------- <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");
}
@end

Dog.m

#import "Dog.h"

@implementation Dog
//重写父类的eat和bark方法
-(void)eat{
    
    NSLog(@"狗----->吃");
    
}
-(void)bark{
    
    NSLog(@"狗----->叫");
}
@end

类寻找方法,会先从自己找起,然后再找父类,爷爷类...基类直至报错

例如Dog的对象调用方法会先从自己的方法中找起,然后再到Animal类中找,最后到NSObject中找,这也是为什么一旦重写后,子类并不会调用父类的方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值