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

来源:互联网 发布:淘宝拍a发b不降权 编辑:程序博客网 时间:2024/04/28 13:07

------- <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中找,这也是为什么一旦重写后,子类并不会调用父类的方法。


0 0
原创粉丝点击