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

------- android培训java培训、期待与您交流! ----------


继承OC中非常重要的内容之一,继承在现实生活中指获取父母的一切资源,在OC指子类获得父类的资源(实例变量和方法)


继承的好处是使代码的可重用性 提高,同时还建立了一种类和类的联系。

继承后子类A可以有父类B的方法和属性,如果父类B同时也是其他类C的子类,那么子类A也有C类的方法和属性,付过C类仍然有父类,那么子类A仍可继承到该类的属性和方法,一直继承到基类NSObject.

即 子类的方法和属性=子类自己独有的方法和属性+父类的方法和属性+爷爷类的方法和属性+...+基类的方法和属性


父类Animal的代码

#import 

@interface Animal : NSObject
{
    @private
    NSString *haHaWoBuHuiBeiJiCheng;
}
@property(nonatomic,assign)int age;
-(void)eat:(NSString*)foodName;
-(void)run;
@end


 子类Dog 
  

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


你可能感兴趣的:(黑马程序员——OC基础---继承)