• 继承(一)—— 继承的定义 + 继承方式 和 访问限定符的关系


    继承是一种提升代码的复用性的重要手段,允许我们在原有类的基础上进行扩展。比如Person类和Student类都包含了 eat() 函数,我们可以让Student类继承Person类,这样的话,Student类就可以复用Person类的 eat 函数了。

    1. class Person
    2. {
    3. public:
    4. void eat();
    5. };
    6. class Student
    7. {
    8. public:
    9. void eat();
    10. };

    目录

    一、继承的定义

    1、定义格式

    2、继承方式 和 访问限定符

    (1) public 继承(最常用)

    (2) protected 继承

    (3) private 继承

     二、protected访问限定符的来源


    一、继承的定义

    1、定义格式

    假设让 Student 类继承 Person 类。继承的一方,我们称为子类或者派生类被继承的一方,我们称为 父类 或者 基类。继承方式有三种(public、protected、private),按照现实的例子,继承上一辈可以选择全部继承,也可以只继承一部分。

    2、继承方式 和 访问限定符

    继承可以看作是从外部进入父类内部取走需要的东西。既然想要拿东西,那就必然会受到访问限定符的限制,就算你想全部继承,但是访问限定符可能不让你全拿走。

    下面我们分别从三种继承方式的角度,访问限定符是如何限制继承的。根据访问权限进行排名有 public > protected > private ,遵守的原则主要有两个:

    • 基类的 private 成员 无论是以何种方式被继承,在派生类中不可见
    • 父类成员被子类继承以后,访问限定符 = min { 成员在基类的访问限定符,继承方式 }

    (1) public 继承(最常用)

    public成员

    访问限定符 = min { 成员在基类的访问限定符,继承方式 } = min { public , public }  = public

    protected成员:访问限定符 = min { public ,protected } = protected

    private成员:private 成员在子类中不可见(不可见的意思是看不到,也不能被使用)

    (2) protected 继承

    public成员

    访问限定符 = min { 成员在基类的访问限定符,继承方式 } = min { protected , public }  = protected 

    protected成员:访问限定符 = min { protected ,protected } = protected

    private成员:private 成员在子类中不可见(不可见的意思是看不到,也不能被使用)

    (3) private 继承

    public成员

    访问限定符 = min { 成员在基类的访问限定符,继承方式 } = min { private , public }  = private

    protected成员:访问限定符 = min { private ,protected } = private

    private成员:private 成员在子类中不可见(不可见的意思是看不到,也不能被使用)

     二、protected访问限定符的来源

    private 和 protected 都无法从类外被访问,那么这两者的区别在哪里呢?protected 访问限定符是因继承才出现的

    父类有些成员只是一个中间变量,比如下面的_tmp,无需被子类继承;但是有些东西是必要的,可以被子类继承,因此就有了protected 和 private。

    • 从类的角度:private 和 protected 成员无法从外部直接访问
    • 从继承的角度:protected 可以被继承,private 不可被继承(其实是既不可见又不可用)
    1. class Person
    2. {
    3. public:
    4. void eat();
    5. protected:
    6. int _age;
    7. private:
    8. int _tmp; //中间变量
    9. };
  • 相关阅读:
    Spring及SpringMvc
    分布式锁开发
    edge扩展下载出现Download interrupted
    测试经验总结
    【Java】this、super关键字,代码块介绍
    JS前端使用Blob和File读取文件的操作代码
    抢单业务介绍
    pnpm9.5.0(catalog协议)
    性能测试-基础理论知识
    深入理解Linux网络笔记(四):内核是如何发送网络包的
  • 原文地址:https://blog.csdn.net/challenglistic/article/details/127707320