关于继承是怎么样的?那当然是很好理解之

本文描述了关于继承的大部分知识,但是并不全,每篇博客之间的知识都有互串,所以需要把几篇文章合起来看,学会融会贯通!

温馨提示:使用PC端观看,效果更佳! 

目录

1.继承是什么

2.什么时候用到继承

3.如何实现继承

4.关于对象的访问

​编辑

5.使用super关键字访问父类

6.父类构造方法

7.介绍protected

8.final关键字


1.继承是什么

(1)在现实生活中,我们都听说过子承父业这个词,这种也叫继承。

(2)某某小孩很顽皮,这肯定是继承了他爸的基因

那么在计算机中,继承是怎么样的呢?

(1)一个类继承了另一个类,这称为继承;前者成为子类,而后者就是父类

(2)继承机制是面向对象程序设计使代码可以复用的最重要的手段,允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生的类,称为派生类。

2.什么时候用到继承

(1)当几个类中有较多重复的代码时;当两个类的属性很相近时。

(2)例如:

这个时候我们可以用到继承

3.如何实现继承

(1)语法

继承使用到关键字:extends

class 类名 extends 类名 {}

(2)示例

class Animal {
    public String name;
    public int age;
    public void eat() {
        System.out.println("正在吃");
    }
}
class dog extends Animal {
    public String color;
    public void doing() {
        System.out.println("正在旺旺叫");
    }
}
class Cat extends Animal{
    public void doing() {
        System.out.println("正在喵喵喵");
    }
}

(3)作用

这样就完成了对共性的抽取,实现了代码的复用

4.关于对象的访问

 下面做一些测试,观察默认情况下是如果访问的

(1)子类和父类中不存在相同的变量名字

(2)子类和父类中存在相同变量名字

结果:

直接访问,访问到的是子类中的变量

(3)访问成员方法

结果:

同样,如果子类和父类中存在相同的名字,优先访问子类

(4)访问父类私有成员

我们都知道,当被private修饰之和,直接访问权限就被限制在了同一个类中;那如果是继承它的子类呢?

1)直接访问

2)间接访问

(5)总结

 1)通过子类对象的引用,去访问子类和父类中不存在相同名字的变量和方法时,优先在子类中寻找,若子类中不存在该变量或者方法时,才会到父类中寻找,若都不存在,则编译报错。

2)通过子类对象的引用,去访问子类和父类中存在相同名字的变量或方法(不构成重载),同样优先访问子类,子类中不存在才去访问父类,都没有则编译报错。

3)那如果子类和父类中存在相同的名字和方法,该如何访问到父类中的呢?下面介绍一个关键字:super

5.使用super关键字访问父类

这个super关键字和this有三个类似的功能,而super出现的意义就是:在子类的方法中访问父类

(1)super访问父类成员变量

这种一定是要求在子类这个类中,而且是在子类中一个方法内

访问:

结果:前面两个为子类,后面一个为父类

(2)访问父类成员方法

三种访问方式:

结果:

(3)super和this的大致访问

(4)super访问父类构造方法

下面先介绍父类构造方法

6.父类构造方法

在构造方法这里,和前面类的构造方法很类似。不写构造方法时,编译器默认提供,写了不带参数没有实现的构造方法也默认没有提供,但是如果写了带参数的构造方法,编译器则不会再提供

(1)不提供构造方法

第一种情况:正常

第二种情况:正常

第三种情况:

(2)主动提供构造方法

第一种情况:只给子类提供

第二种情况:只给父类提供(报错)

原因解释:当父类提供了构造方法之后,子类就不会再提高任何的构造方法;因为父类需要初始化,但是子类中没有构造方法,无法调用父类的构造方法,所以会报错

做法:在子类中也提供构造方法,并在里面使用super关键字调用父类构造方法

第三种情况:子类父类都提供

根据上面的情况,我们可以做出一些总结

(3)关于构造方法的总结

1)父子类,每次构造子类对象前,都会先完成对父类的构造。也就是说,总是会先调用父类的构造方法,再调用子类的构造方法

2)程序员不提供任何构造方法,编译器都会默认提供

3)当父类手动提供了构造方法,而子类却没有,则会报错,因为子类无构造方法则无法调用

4)针对上面第三点的解释:为什么子类和父类都不提供构造方法时,可以调用到父类构造?

即使是默认的构造方法,在子类构造中,也都会默认有一个super()语句,无论写没写。

当父类手动提供了带参构造方法之后,子类中也就不会再提供任何的构造方法;同理,子类中手动提供了带参构造方法,父类中也不会再提供但是,前者会报错,因为构造子类前,一定会先去构造父类(但是没有super(),无法调用父类构造);而后者,父类不存在带参构造方法,不需要强制初始化。(存在带参构造方法时,在实例化一定要对其赋值,否则就是报错,上面的终究原因)

(4)使用super()调用父类构造方法

1)默认提供(不细说了)

2)手动提供

class Big {
    public int a;

    public Big(int a) {
        this.a = a;
    }
}
class Min extends Big {
    public int b;

    public Min(int a, int b) {
        super(a);
        this.b = b;
    }
}
public class Test3 {
    public static void main(String[] args) {
        Min min = new Min(10,20);
    }
}

(5)关于super的细节和注意事项

1)super()必须在子类构造方法中的第一行,否则报错

并且,super()只能出现一次,也不能和this()同时出现(他们都必须在第一行)

2)只能存在于非静态的方法中,依赖对象;用来访问非静态成员方法和字段

7.介绍protected

这是一个关键字,一般是用于修饰成员变量和成员方法

根据上表可知,只要在同一个包中,不同类之间是可以互相使用的;它还多了一条性质,就是只要是父子类关系,在不同的类中也可以互相调用。

下面是不同包中的两个类 

(1)不能访问的状态

1)public修饰

2)被protected修饰后

意思就是:在不同包中,不能直接访问被protected修饰的成员变量

(2)允许访问状态

想要访问被protected修饰的成员变量,就要按照下面的步骤来进行

1)使用继承关系

2)使用super关键字访问父类

错误原因就是super不能在静态方法中使用

3)正确访问

访问并且赋值:

8.final关键字

final关键字在java中有三个功能。

(1)修饰变量(2)修饰类(3)修饰方法

(1)修饰变量

1)未修饰时:

public static void main(String[] args) {
        int a = 520;
        System.out.println(a);
        a = 250;
        System.out.println(a);
    }

未被修饰时,变量的值是可以被改变的;也就是说,没有被final修饰的520就是250

2)加上修饰

语法:

final 类型 变量名字 = 值;

被fianl修饰的变量,可以理解成变成了一个常量,此时是无法被修改的。

(2)final修饰类

作用:被final修饰的类,不能再被继承,称为密封类

1)修饰前:

2)修饰后:

(3)修饰方法

作用:当这个方法被修饰后,表明这个方法不能再被重写

1)未被修饰

2)被修饰后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/472378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

es 聚合操作(一)

前言 Elasticsearch除搜索以外,提供了针对ES 数据进行统计分析的功能。聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 衣服品牌的受欢迎程度这些衣服的平均价格、最高价格、最低价格这些衣服的每天、每月销量如何 使用…

Bito插件

此文档只作用于指导性工作,更多资料请自行探索。 1、插件安装与介绍 1.1 插件下载与安装 在idea中搜索:Bito Bito is also available for:​编辑VSCode​编辑JetBrains​编辑CLI 1.2 官方介绍 插件:ChatGPT GPT-4 - Bito AI Code Assista…

LTD267次升级 | 商城升级线下退款功能 • 内容URL生成高清二维码 • 官微名片展示产品视频

1、商城优化退款功能,支持手动退款; 2、内容生成二维码支持高清分辨率; 3、平台版名片小程序产品橱窗支持视频内容; 4、 其他已知问题修复与优化; 01 商城 在本次升级中,我们对商城的退款功能做了改进与…

首席财务官期刊投稿邮箱

《首席财务官》杂志是由国家新闻出版总署批准的金融类期刊。杂志围绕“打造CFO新定义”而展开,定位于“国内国内第一本公开发行的面向CFO人群提供服务的专业资讯媒体”,核心围绕“竞争、资本、运营”三大要点展开,以CFO视角解读“公司金融&am…

Python的内建比较函数cmp比较原理剖析

Python中的cmp()函数用于比较两个对象的大小。 cmp( x, y):比较2个对象,前者小于后者返回-1,相等则返回0,大于后者返回1. Python的cmp比较函数比较原理 Python的cmp函数可以比较同类型之间,或者不同数据类型之间。然…

Nebula Graph-01-Nebula Graph简介和安装以及客户端连接

前言 NoSQL 数据库 图数据库并不是可以克服关系型数据库缺点的唯一替代方案。现在市面上还有很多非关系型数据库的产品,这些产品都可以叫做 NoSQL。NoSQL 一词最早于上世纪 90 年代末提出,可以解释为“非 SQL” 或“不仅是 SQL”,具体解释要…

初识HOOK框架frida

hook是什么 hook框架是一种技术,用于在运行时拦截和修改应用程序的行为,通过hook,可以劫持应用程序的方法调用、修改参数、篡改返回值等,以达到对应用程序的修改、增强或调试的目的。 常见的hook框架有哪些 Xposed Framework&am…

固态浸压计

Solid State Dip Meter(固态浸没仪/固态浸压计) 是真空管栅极浸入式仪表的固态半导体版本。它是一种用于测量 LC 电路谐振频率的仪器。LC 电路是由电感 (L) 和电容 (C) 组成的电路。当电感的感抗与电容的容抗相互抵消时,这些元件可以谐振于特定频率。 固态浸入式仪…

matlab中Signal Editor定义梯形信号输出矩形信号

matlab中Signal Editor定义梯形信号输出矩形信号,可以通过如下勾选差值数据实现梯形信号输出。

MySQL数据库介绍与部署

背景 MySQL 是一个开源的关系型数据库管理系统(RDBMS),最初由瑞典公司 MySQL AB 开发,后被 Oracle 公司收购。MySQL 使用标准 SQL 进行查询和管理数据,并支持多种操作系统。它是最流行的开源数据库之一,被…

金属表面缺陷检测设备通常采用计算机视觉技术和机器学习算法

金属表面缺陷检测是在金属制造过程中非常重要的质量控制步骤。它涉及检测金属表面可能存在的各种缺陷,如裂纹、气泡、凹坑、氧化、斑点等。这些缺陷可能会影响金属制品的性能和质量,因此需要及早发现并进行处理。 目前,金属表面缺陷检测通常采…

C++:部分题目

1. 封装、继承、多态 封装:将所需的数据成员,以及对数据的操作方法(成员函数),绑定在一起成为类(类型),定义该类型的对象时,成员被自动隐藏在对象内部。通过封装可以限定…

模拟算法总述

模拟 1.模拟算法介绍 模拟算法通过模拟实际情况来解决问题,一般容易理解但是实现起来比较复杂,有很多需要注意的细节,或者是一些所谓很”麻烦”的东西。 模拟题一般不涉及太难的算法,一般就是由较多的简单但是不好处理的部分组成…

.net使用excel的cells对象没有value方法——学习.net的Excel工作表问题

$exception {"Public member Value on type Range not found."} System.MissingMemberException 代码准备运行问题解决1. 下载别的版本的.net框架2. 安装3. 运行 代码 Imports Excel Microsoft.office.Interop.Excel Public Class Form1Private Sub Button1_Click(…

Adams Car——Adams car与Simulink联合仿真

1.修改悬架阻尼、刚度 ①先找到车辆悬架阻尼和刚度文件,这里以阻尼显示为例 ②修改阻尼曲线 找到对应车的文件 ③修改完后进行替换,刚度修改同理 2.转动惯量与车的质量修改

SQL server服务连接失败,通过端口1433连接到主机 localhost的 TCP/IP 连接失败

SQL server服务连接失败,通过端口1433连接到主机 localhost的 TCP/IP 连接失败 出现这个错误的时候,首先确保sql的服务正常启动 通常来说正常安装的SQL server之后,会自带一个软件 打开:SQL server配置管理器 确认一下红框内的…

单片机--数电(2)

组合逻辑电路 根基题目要求设计逻辑电路 组合逻辑电路 由一些逻辑门电路搭建,为实现某些功能的电路 特点 在任意时刻输出只取决于该时刻的输入,与电路原来的状态无关 根据图分析组合逻辑的方法 可以使用multisim的逻辑转换仪 1组合逻辑电路图 2…

C语言——自定义类型——结构体(从零到一的跨越)

目录 前言 1.什么是结构体 2.结构体类型的声明 2.1结构体的声明 2.2结构体的创建和初始化 2.3结构成员访问操作符 2.3.1结构体成员直接访问 2.3.2结构体成员的间接访问 2.4结构体变量的重命名 2.5结构体的特殊声明 2.6结构的自引用 3.结构体内存对齐 3.1对齐规则 3…

保护王国的钥匙:探索特权访问管理 (PAM) 的深度

在零信任架构的范例中,特权访问管理(PAM)正在成为网络安全策略的关键组成部分,旨在控制和监控组织内的特权访问。本文深入探讨了 PAM 在现代网络安全中的关键作用,探讨了其原理、实施策略以及特权访问的演变格局。 什么…

3.20作业

1、思维导图 2、 1> 创建一个工人信息库,包含工号(主键)、姓名、年龄、薪资。 2> 添加三条工人信息(可以完整信息,也可以非完整信息) 3> 修改某一个工人的薪资(确定的一个&am…