继承1 2024_9_18

news/2024/9/19 2:36:00 标签: java, 开发语言

1.继承的基本用法

当需要继承的时候,我们就在派生类的后面加上一个权限+父类,这个权限可以是公有,保护和私有,后面就是继承的父类.此时,下面的stu这个派生类,也就可以使用Person里面的方法了.

2.继承基类成员访问方式的变化

当父类被继承到派生类的时候,此时会根据继承方式的不同,而导致父类的不同类型数据访问的方式也可能会发生改变.

现在我们来罗列一下这些情况:
首先是父类里面的private成员,当这种成员被继承后,不论是公有继承,保护继承还是私有继承,他的访问权限就只是private;如果是父类里面的protected成员,则如果是公有继承和保护继承,则访问权限就是protected,如果是私有继承,则访问方式是private;最后如果是父类的公有数据,如果公有继承则访问权限则是public,如果是保护和私有继承,则分别是protected和private.

到这里,我们就可以很明显的看出一点规律.比如私有类的任意继承方式都是不可见的.如果说继承的权限小于父类数据的原有权限,则访问方式就是继承权限,如果等于,那就是继承权限/父类原有权限,如果大于,则是父类原有权限.

3.基类和派生类的对象赋值转换

对于对象之间的赋值和相互转换,我们知道,意义相近的类型,是可以相互之间进行转换和赋值的.比如int和double之间可以相互转换,单参数构造函数支持隐式类型转换(在隐式类型的转换中会产生临时变量,临时变量具有常性) , 那么基类和派生类之间 , 也可以相互赋值和转换吗?

在public继承的情况下,每一个子类都可以看作一个特殊的父类(is-a概念).在这种情况下的赋值,他叫做切割/切片赋值.他们的赋值转换之间并不会产生临时变量,这叫做切片赋值兼容.怎么证明?

如果说这里会产生临时变量的话,那么临时变量具有常性,我们因此需要在Person前面加一个const,但是这里不加const他都没有报错,因此这里并不会产生临时变量.

不管是对象也好,还是引用,或是指针,都是可以相互转换的.

4.继承中的作用域

1.在继承体系中基类和派生类都有着自己独立的作用域,这也就意味着,在基类和派生类里面,函数名是可以相同的,也可以定义同名成员.

2.子类和父类中如果有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义.

当基类和派生类都有一个叫_age的时候,此时调用st.Print()的话,就会就近原则的输出Stu的类.

一个在局部域,一个在全局域,则会有限输出局部域的变量.

局部域和全局域都会影响生命周期,访问.

在同一个作用域下,相同名字的函数会构成重载.

而对于这个父类和子类的构造函数和析构,如果是构造的话,则会先构造父类,后构造子类,而析构则会先析构子类,后析构父类


http://www.niftyadmin.cn/n/5664890.html

相关文章

【算法竞赛】队列

队列相关概念 队列中的数据存取方式是“先进先出”,只能向队尾插入数据,从队头移出数据. 队列的原型在生活中很常见,如食堂打饭的队伍,先到先服务.队列有两种实现方式:链队列和循环队列,如图1.2所示. 链队列可以看作单链表的一种特殊情况,用指针把各个节点连接起来. 循环队…

QCustomPlot笔记(一)

文章目录 简介将帮助文档添加到Qt Creator中编译共享库cmake工程编译提示ui_mainwindow.h找不到qcustomplot.h文件 环境:windowsQt Creator 10.0.1cmake 简介 QT中用于绘制曲线的第三方工具 下载地址:https://www.qcustomplot.com/index.php/download 第一个压缩…

一、Numpy入门

Numpy入门 前言一、numpy简介二、Numpy的ndarray属性2.1. 直接用 .属性的方法实现2.2. 直接函数的方法实现 三、Numpy的ndarray的创建3.1. ndarray介绍3.2. 数组形式3.3. zeros()、ones() 、 empty()3.4. arange(),类似 python 的 range() ,创建一个一维…

特价电影票对接接口平台推荐?微客云影票

特价电影票对接接口平台推荐 一、常见的较好平台 微客云影票与全国 12000 多家影院建立了合作,覆盖范围广,其提供的电影票价格普遍低于市场价,平均每张票能省下不少钱,在万达、CGV 等大型影院优惠更为显著。 二、判断平台好坏的…

为什么你的下一个项目应该使用 NextJS 而不是 React?

当我第一次涉足 Web 开发世界时,我被 React 的强大功能和多功能性所吸引。 作为最受欢迎的库之一,它似乎是构建动态用户界面的首选。 然而,随着我的项目变得越来越复杂,我发现自己面临着挑战我的效率和可扩展性的限制。 就在那…

【七篇文章从零速通transformer】01 从零开始解密神经网络:深度学习基础全解析

文章简介 本系列文章旨在帮助零基础的读者系统地掌握深度学习,最终能够理解 Transformer 架构。本篇文章是第一篇,我们将从深度学习最核心的知识——神经网络——开始讲解,深入浅出地带你了解神经网络的结构、如何让神经网络工作,激活函数、损失函数、优化器和反向传播等关…

Mybatis中sql数组为空判断

一、Mybatis xml中的sql通过if语句判定是否为空 <if test"arrays ! null"> </if>上述示例只能判断arrays数组不为null&#xff0c;那如果是个空数组呢 二、Mybatis xml中的sql通过if语句判定数组非空数组 <if test"arrays ! null and arrays.l…

【系统架构设计师】设计模式的分类

设计模式概述 设计模式(Design Pattern)是软件开发中的最佳实践,旨在解决常见的设计问题。它们可以分为三大类:创建型模式、结构型模式、行为型模式,每个类别都提供了解决特定问题的模式。下面将详细介绍每个类别及其包含的所有设计模式,并提供简要的说明,帮助区分不同…