美文网首页
继承与派生

继承与派生

作者: 我不白先生 | 来源:发表于2020-09-17 15:21 被阅读0次

继承与派生
1.1继承:也是两个类之间的一种关系
1.2是父类与子类之间的一种关系,需要满足“is a”的条件
1.3子类继承父类之后,将父类中的所有属性和方法直接在子类中复用
1.4派生:在子类中添加自己的属性与方法

1.5super指针指向子类对象中继承过来的父类属性和方法 super指针.png
1.6重写:在子类中对父类继承过来的方法重新定义函数体
1.7隐藏:子类重写父类的方法后,用子类的对象调用该方法时,优先调用子类重写的方法
1.8 private与protected(访问方法)
1.8.1private:作用域仅在所定义的类中(私有的)
1.8.2protected:作用域在所定义类及其子类中(保护的)

TRAnimal.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface TRAnimal : NSObject
{
    int _a;//保护的作用域在所定义类及其子类中
    @private
    int _b;//作用域仅在所定义的类中
}
@property NSString *name;
@property int age;
-(id)initWithName:(NSString *)name andAge:(int)age;//带参初始化
+(id)animalWithName:(NSString *)name angAge:(int)age;//带参工厂
-(NSString *)eat;
-(NSString *)sleep;
@end

NS_ASSUME_NONNULL_END

TRAnimal.m


#import "TRAnimal.h"

@implementation TRAnimal
-(id)initWithName:(NSString *)name andAge:(int)age
{
    self = [super init];
    if (self)
    {
        self.name = name;
        self.age = age;
    }
    return self;
}
+(id)animalWithName:(NSString *)name angAge:(int)age
{
    TRAnimal *a = [[TRAnimal alloc]initWithName:name andAge:age];
    return a;
}
-(NSString *)eat
{
    return [NSString stringWithFormat:@"动物%@吃",self.name];
}
-(NSString *)sleep
{
    return [NSString stringWithFormat:@"动物%@睡",self.name];
}
-(NSString *)description
{
    return [NSString stringWithFormat:@"名字:%@\n年龄:%d",self.name,self.age];
}
@end

TRDog.h(子类)

@interface TRDog : TRAnimal
-(NSString *)watchHome;
@property int weight;
-(id)initWithName:(NSString *)name andAge:(int)age andWeight:(int)weight;
@end

TRDog.m

@implementation TRDog
-(NSString *)watchHome
{
    return [NSString stringWithFormat:@"狗狗%@正在看家", self.name];
}
-(id)initWithName:(NSString *)name andAge:(int)age andWeight:(int)weight
{
    self = [super initWithName:name andAge:age];
    if(self)
       {
           self.weight = weight;
       }
    return self;
}
-(NSString *)eat
{
    _a = 10;//作用域在所定义类及其子类中(保护的)
    //_b = 20;作用域仅在所定义的类中(私有的)
    NSString *str = [super eat];
    str = [str stringByAppendingFormat:@"\n狗狗%@正在啃骨头",self.name];
    return str;
}

ViewController.m

#import "ViewController.h"
#import "TRDog.h"
#import "TRCat.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *outputLabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    TRDog *  dog = [[TRDog alloc]init];
    dog.name = @"旺财";
    dog.age = 2;
    self.outputLabel.text = [dog eat];
    
    TRCat *cat = [[TRCat alloc] initWithName:@"加菲猫" andAge:1];
    self.outputLabel.text = [cat sleep];
    self.outputLabel.text = [dog watchHome];
    self.outputLabel.text = [cat catchMouse];
    TRDog *dog1 = [[TRDog alloc] initWithName:@"阿黄" andAge:3 andWeight:5];
    self.outputLabel.text = [dog1 eat];
}

相关文章

  • 继承与派生

    三种继承方式:public、protected、private

  • 继承与派生

    继承与派生1.1继承:也是两个类之间的一种关系1.2是父类与子类之间的一种关系,需要满足“is a”的条件1.3子...

  • 继承与派生

    1,父类与子类,单继承与多继承 2、为何要用继承:用来解决类与类之间代码冗余问题 3,如何实现继承 4,属性查找 ...

  • C++奇淫技巧,程序员为啥天天学继承与派生,真的有这么难吗

    1. 继承与派生 1.1继承与派生的概念 在C++中,可重用性是通过继承这一机制来实现的。所谓继承,就是在一个已存...

  • 9月18日-4期C语言学习总结

    今天学习:继承与派生 派生类对象由两部分组成:1.由基类继承成员,2.派生类新增加的自己特有的成员。 类的继承方式...

  • 2017 09 18

    相关知识点的学习与运用: 一.继承和派生: 1.继承: 1-1基本结构: class派生类名:继承方式 基类名 {...

  • C++ 一篇搞懂继承的常见特性

    继承和派生 01 继承和派生的概念 继承: 在定义一个新的类 B 时,如果该类与某个已有的类 A 相似(指的是 B...

  • 实现继承

    1. 继承 1.1 继承和派生的关系 基类和派生类的关系就是,派生类从基类派生而来。 1.2 派生语法 1.3 访...

  • 类的继承与派生

    类的继承与派生 类的继承就是新类由已经存在的类获得已有特性,类的派生是由已经存在的类产生新类的过程。已有类叫做基类...

  • c++ 继承与派生

    派生类的构造函数和析构函数 用户在声明类时可以不定义构造函数,系统会自动设置一个默认的构造函数,在定义类对象时会自...

网友评论

      本文标题:继承与派生

      本文链接:https://www.haomeiwen.com/subject/kbnfyktx.html