6. 继承、重写、super、final

文章目录

  • 一、重新定义需求
  • 二、继承
    • 1. 继续分析
    • 2. 概念
    • 3. 代码
      • ① 父类
      • ② 子类
      • ③ 测试结果
    • 4. 饿狼传说之多层继承
      • ① 概念
      • ② 代码
    • 5. 多继承
  • 三、方法的重写
    • 1. 情境
    • 2. 代码
      • ① 吃什么
      • ② 怎么叫(Override重写)
    • 3. 小结
  • 四、super
    • 1. 啃老
    • 2. 啃老啃到底
  • 五、final
    • 1. 用途及特征
    • 2. 举例理解
      • ① 修饰类
      • ② 修饰方法
      • ③ 修饰成员变量
        • 补充
    • 3. 更通俗地理解
  • 六、内容出处

一、重新定义需求

        你的程序火了以后,又有大爷大妈来找你了。他们说,不能光给养狗的写啊,也得考虑一下他们这些养猫的、养仓鼠的人啊。
        这个问题该怎么解决呢?总不能给每种宠物都写一个程序吧,那得把人累死。或者说在当前程序里再定义一些cat类、Hamster类等,定义完怎么办呢,又得重新定义姓名、年龄、品种、食物、吃喝拉撒这些属性,这是不是太麻烦了。

二、继承

1. 继续分析

        我们可以再想一下,猫、狗、仓鼠是不是都是动物啊。而且它们都有姓名、年龄、品种、吃喝拉撒这些属性,这些属性也恰好是所有动物的共性。
        既然如此,我们是不是可以把这些共性抽离出来给Animal这个类,再让Cats、Dogs、Hamsters去继承Animal里面的东西。这样一来,就不需要重复定义了。相当于又从一个更高的维度去看待问题了。

2. 概念

        继承描述是父和子的关系。共性的部分抽离出来,放在父类(如:Animal类)里,子类(如:Cats类)保存特性(如:猫需要猫砂)。
        通俗一点就是上梁不正下梁歪(虽然是贬义词,但是凑合着理解吧)、这孩子跟ta爸一模一样。
        写法:子类 extends 父类

3. 代码

在这里插入图片描述

① 父类

直接从原来的Dogs类里剪切🤣

package com.practice.bean;import lombok.Getter;
import lombok.Setter;
import lombok.ToString;@Getter
@Setter
@ToString
public class Animal {private String name;private int age;private String variety;private String food;private static String plot = "NanG";public  static String getPlot(){return  plot;}// 无参构造器public Animal(){}// 有参构造器public Animal(String name, int age, String variety, String food) {this.name = name;this.age = age;this.variety = variety;this.food = food;}public Animal(String name, String variety){this.name = name;this.variety = variety;}public Animal(String name){this.name = name;}public void setAge(int age){if(age < 0 || age > 30){System.out.println("输入数据不合法, 已为您自动清零");this.age = 0;}else{this.age = age;}}public int getAge(){return this.age;}public void eat() {System.out.println(this.name + "吃饭!");this.sleep();}public void sleep() {System.out.println(this.name + "睡觉!");}void crazy() {System.out.println(this.name + "发疯");}//    //不合理
//    private String plot = "NanG";
//    public String getPlot(){
//        return this.plot;
//    }public static void injection(){System.out.println("所有的动物, 月底打针!");}
}

② 子类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③ 测试结果

在这里插入图片描述
在这里插入图片描述
        由此可见,狗、猫和仓鼠类确实继承了Animal类里的东西。虽然也可以直接创建一个Animal的实例,但是说实话意义不大。

4. 饿狼传说之多层继承

① 概念

在这里插入图片描述
        通俗来说就是,灰太狼从他太太太爷爷那一辈就吃不到羊,他继承了这个基因,所以他也没吃到羊。

② 代码

Animal和Dogs类没做任何改动在这里插入图片描述
在这里插入图片描述

5. 多继承

多继承:联想一下骡子(马和驴的杂交种,同时具备马和驴的共性)。
java不支持多继承

三、方法的重写

1. 情境

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        如图所示,上述程序可以王阿姨家的狗和张大爷家的猫在吃饭和在喊叫。但是我现在想知道它们吃的是什么?怎么叫的?

2. 代码

① 吃什么

        显然,王阿姨和张大爷可以自己决定家里的宠物吃什么。因此可以借助food这个成员变量,通过传参数区分宠物的食物。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

② 怎么叫(Override重写)

        王阿姨和张大爷肯定不能决定自己家的宠物怎么叫啊,所以刚刚传参的方式肯定不适用。这个时候就要用到重写了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 小结

在子类当中,凡是@Override注解下面的方法一定是来自于它父类的,但是它又不学它的父亲。比如说灰太狼有天确实吃到羊了,不走他父亲的老路了。
子类自己认为,必须打破他父亲的传统,进行革新,革新的内容就是方法体,于是它重新写了父类的方法。例如王阿姨家的狗可以汪汪叫了,张大爷家的猫可以喵喵叫了,发展了自己的特性,没必要都动物叫了。
③ 快捷键:alt + insert -> Override Methods

四、super

1. 啃老

         那我子类重写了父类的方法,但是我要是还想使用父类的方法该怎么办呢?通俗来说就是,我不想自己赚钱自己花了,我想直接花我爹的。放到该案例中就是,王阿姨家的狗说我不想汪汪叫了,我就乐意动物叫。
         alt + insert -> Override Methods 可快速生成重写方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        这样一来,王阿姨家的狗就不是汪汪叫了,开始动物叫了。

2. 啃老啃到底

        继承本身是不能继承父类的构造方法的。通俗来讲就是,啃老不能说连爸爸的脸也一起照搬弄到自己脸上,这是很难的。那我如果我非要这么做怎么办呢?还得靠super
例如:我现在可以初始化一个动物实例(因为Animal类里有相关的构造方法),但是没有办法初始化一个狗的实例(Dogs类里没有相关的构造方法)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        现在要开始啃老了。
        快捷键:alt + insert -> Constructor(Override Methods也可以) -> 全选(找到构造方法, 然后选择) -> 回车
在这里插入图片描述
在这里插入图片描述
        发现可以了
在这里插入图片描述

五、final

1. 用途及特征

① 用途:修饰类;修饰方法;修饰成员变量
② 特征:final意为最终,也就是说断子绝孙了。final修饰的类已经是最底层了,后面没人继承它了,它也不能被继承;final修饰的方法不可以被子类重写,但是可以仍旧被子类使用;final修饰的成员变量的值后续不可以被更改了。

2. 举例理解

① 修饰类

        显然,拉布拉多已经是我们这个程序的最底层了。没有动物会再继承它了,此时我们就可以用final修饰它。
在这里插入图片描述
        随意新建一个类去验证一下,发现拉布拉多这个类确实不能被继承。
在这里插入图片描述

② 修饰方法

        我们知道拉布拉多是一种导盲犬。因此我们可以在Dogs类里面写一个类似的方法,再在Labrador类里重写一下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        此时如果用final修饰Dogs类里的这个导盲方法,就会发现Labrador类无法重写这个方法了。
在这里插入图片描述
在这里插入图片描述
        但是拉布拉多犬仍然可以使用这个方法,只不过返回的也是false了。
在这里插入图片描述
在这里插入图片描述

③ 修饰成员变量

        用static修饰小区名以后,虽然外部不能更改了,但是仍然无法防止程序员自身手误导致该变量值被更改。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        这样一来,拉布拉多发个疯就把小区名给改了,太荒谬了吧。怎么办呢?用final修饰这个成员变量
在这里插入图片描述
在这里插入图片描述

补充

在这里插入图片描述
① 根据阿里开发手册的要求,我们用plot表示小区名显然不太合理。可以改成text_community_name,text指的是该变量的实际用途(虽然这样写也不太合适,但凑合着看),而且要全部大写。
② idea全部大写快捷键:Ctrl + Shitf + u
在这里插入图片描述

3. 更通俗地理解

        假设A是一个富豪,B是ta的孩子。正常情况下B是可以继承A所有东西的。
        但是A觉得B太败家了,又不孝顺,因此不想给B一点遗产。这种情况下,就可以直接用final修饰A这整个类。
        A转念一想,B毕竟是自己的孩子,万一ta以后想改过自新了呢,总要给孩子留点退路,不能逼太紧。于是,A就把车子、房子留给B了。但是思虑再三后决定,不能给B过多现金,ta可以定期拿一部分作为生活费,但是不能为所欲为。这种情况下,A就在自己这个类里写了一个getMoney()方法,并且用final修饰了。
        A为了防止B把房子卖了,于是把地契都给烧了。这个时候,就可以用final修饰home这个成员变量。

六、内容出处

java

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

快速解决urllib3.exceptions.MaxRetryError: HTTPSConnectionPool

正题 使用pip命令查看urllib3版本 pip list发现版本为 1.26.9 urllib3 v1.26.9此时如下报错&#xff0c;无法正常使用&#xff08;使用了代理&#xff09; urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(hostxxx.xxxxx.com, port443): Max retries exceeded wit…

智能的三大问题:何以、所以、可以

智能具有三大问题&#xff0c;即何以、所以、可以。“何以&#xff08;Why&#xff09;”涉及探讨智能的本质及其产生的原因。智能是什么&#xff1f;它的定义和特征是什么&#xff1f;为什么人类或机器需要智能&#xff1f;它如何帮助我们解决复杂问题、做出决策和适应环境&am…

(五)Proteus仿真STM32单片机串口数据流收发

&#xff08;五&#xff09;Protues仿真STM32单片机串口数据流收发 – ARMFUN 1&#xff0c;打开STM32CubeMX&#xff0c;找到USART1,配置模式Asynchronous&#xff0c;此时PA9、PA10自动变成串口模式 串口默认参数:115200bps 8bit None 1stop 2&#xff0c;NVIC Settings使能…

【Ubuntu】在Ubuntu上安装IDEA

【Ubuntu】在Ubuntu上安装IDEA 零、前言 最近换了Ubuntu系统&#xff0c;但是还得是要写代码&#xff0c;这样就不可避免地用到IDEA&#xff0c;接下来介绍一下如何在Ubuntu上安装IDEA。 壹、下载 这一步应该很容易的&#xff0c;直接打开IDEA的下载页面&#xff0c;点击下…

科研绘图系列:R语言绘制SCI文章图2

文章目录 介绍加载R包导入数据图a图b图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码 加载R包 library(ggplot2) library(dplyr) library(readxl) library(ggpmisc)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度网盘下载链接: https://pan.baid…

2024年软件设计师中级(软考中级)详细笔记【3】数据结构(下)(分值5分)

上午题第3章数据结构下部目录 前言第3章 数据结构【下】(5分)3.5 查找3.5.1 查找的基本概念【考点】3.5.2 静态查找表的查找方法3.5.3 动态查找表3.5.4 哈希表3.5.4.1 哈希表的定义3.5.4.2 哈希函数的构造方法3.5.4.3 处理冲突的方法 3.6 排序3.6.1 排序的基本概念3.6.2 简单排…

Java 获取热搜并生成图片

效果图如下&#xff1a; 第一步获取热搜 public List<String> getHotNews4(Integer size) {if (size < 0 || StringUtils.isEmpty(size)) {return null;}try {//set 转listreturn new ArrayList<>(getHotNews(size));} catch (Exception e) {logger.error(&qu…

Java 集合 Collection常考面试题

理解集合体系图 collection中 list 是有序的,set 是无序的 什么是迭代器 主要遍历 Collection 集合中的元素,所有实现了 Collection 的集合类都有一个iterator()方法,可以返回一个 iterator 的迭代器。 ArrayList 和 Vector 的区别? ArrayList 可以存放 null,底层是由数…

Java控制台实现《多线程模拟龟兔赛跑》(实现Runnale接口,重写run()方法)

&#xff08;温馨提示&#xff1a;本题最重要的是学习思路&#xff0c;代码还有待优化和改进&#xff01;&#xff09; 下一篇博客进行优化。实现Callable接口&#xff1a;V call() throws Exception 。可以返回结果&#xff0c;以及可以抛出异常。&#xff08;启动线程比较麻烦…

JavaSE——集合2:List(Iterator迭代器、增强for、普通for循环遍历集合)

目录 一、List (一)List接口基本介绍 二、List接口的常用方法 三、List集合的三种遍历方式 四、小练习——使用冒泡排序遍历集合 一、List (一)List接口基本介绍 List接口是Collection接口的子接口 public interface List<E> extends Collection<E> List集…

Matlab实现海洋捕食者优化算法优化回声状态网络模型 (MPA-ESN)(附源码)

目录 1.内容介绍 2部分代码 3.实验结果 4.内容获取 1内容介绍 海洋捕食者优化算法&#xff08;Marine Predators Algorithm, MPA&#xff09;是一种基于海洋生物捕食行为的新型群体智能优化算法。MPA通过模拟海洋捕食者如鲨鱼、海豚等在寻找猎物时的追踪、包围和攻击行为&…

高质量SCI论文撰写及投稿丨论文选题、文献调研、实验设计、数据分析、论文结构及语言规范等----AI强大功能

科学研究的核心在于将复杂的思想和实验成果通过严谨的写作有效地传递给学术界和工业界。对于研究生、青年学者及科研人员&#xff0c;如何高效撰写和发表SCI论文&#xff0c;成为提升学术水平和科研成果的重要环节。系统掌握从选题到投稿的全过程&#xff0c;提高论文撰写效率与…

区块链积分系统:重塑支付安全与商业创新的未来

在当今社会&#xff0c;数字化浪潮席卷全球&#xff0c;支付安全与风险管理议题日益凸显。随着交易频次与规模的不断扩大&#xff0c;传统支付体系正面临前所未有的效率、合规性和安全挑战。 区块链技术&#xff0c;凭借其去中心化、高透明度以及数据不可篡改的特性&#xff0c…

React(一) 认识React、熟悉类组件、JSX书写规范、嵌入变量表达式、绑定属性

文章目录 一、初始React1. React的基本认识2. Hello案例2.1 三个依赖2.2 渲染页面2.3 hello案例完整代码 二、类组件1. 封装类组件2. 组件里的数据3. 组件里的函数 (重点)4. 案例练习(1) 展示电影列表 三、JSX语法1. 认识JSX2. JSX书写规范及注释3. JSX嵌入变量作为子元素4. JS…

Linux操作系统小项目——实现《进程池》

文章目录 前言&#xff1a;代码实现&#xff1a;原理讲解&#xff1a;细节处理&#xff1a; 前言&#xff1a; 在前面的学习中&#xff0c;我们简单的了解了下进程之间的通信方式&#xff0c;目前我们只能知道父子进程的通信是通过匿名管道的方式进行通信的&#xff0c;这是因…

【gRPC】4—gRPC与Netty

gRPC与Netty ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; &#x1f4d6;RPC专栏&#xff1a;https://…

力扣 前缀和

找子数组的个数了解前缀和的基础。 前缀和大致理解为到达某个位置&#xff0c;前面几个数的总和&#xff0c;即s[i1]s[i]a[i1]&#xff0c;可以通过一次循环获得。然后几个前缀和作差&#xff0c;即可得到某个位置到某个位置的和&#xff0c;根据map的键值对进行更新次数。 题…

opencv实战项目(三十一):基于同态滤波的图像亮度提升

文章目录 前言一、同态滤波二、算法实现 前言 在数字图像处理领域&#xff0c;图像亮度的调整是一项基本且至关重要的技术。它不仅关系到图像的视觉效果&#xff0c;而且在许多实际应用中&#xff0c;如医疗影像分析、卫星遥感监测、视频监控系统等&#xff0c;都扮演着关键角…

基于STM32 ARM+FPGA+AD的电能质量分析仪方案设计(一)硬件设计

电能质量分析系统硬件设计 3.1 电能质量分析系统设计要求 本系统实现对电能质量的高精度测量&#xff0c;根据国家相关电能质量分析仪器规定 标准以及对市场电能质量分析仪的分析&#xff0c;指定以下设计目标。 &#xff08; 1 &#xff09;电能质量参数测量精度&#xf…

欧科云链研究院深掘链上数据:洞察未来Web3的隐秘价值

目前链上数据正处于迈向下一个爆发的重要时刻。 随着Web3行业发展&#xff0c;公链数量呈现爆发式的增长&#xff0c;链上积聚的财富效应&#xff0c;特别是由行业热点话题引领的链上交互行为爆发式增长带来了巨量的链上数据&#xff0c;这些数据构筑了一个行为透明但与物理世…