java——嵌套(二)

目录

一:方法的重写(覆盖/覆写)

1. 方法的重写的意义:

2. 重写(overide)

3. 案例

二:继承中构造方法的调用

1. 子类的构造方法会默认调用父类的构造方法;

2. super 关键字调用父类有参构造

3. 总结:

三:super 的用法

四:this 的用法

五:案例

六:最后


一:方法的重写(覆盖/覆写)

1. 方法的重写的意义:

在设计之中,对于已经投入使用的类,我们尽量不要修改。我们一般创建一个新的类,来继承就旧类的内容,从而降低代码的冗余性,提高代码的复用性,对于一些新增的内容,写在重写方法里面即可;

2. 重写(overide)

格式:方法名相同,参数列表相同;

特点:创建的是子类对象,优先使用子类方法;

  2.1 注解(@Override),用来检测 重写 是否正确(当然,可以不写)、

  2.2 子类方法的返回值类型要小于等于父类的;

        另外,Object 类是所有类的公共最高类,即“祖宗类”,

  2.3 子类权限修饰符要大于等于父类的;

        public > protected > (默认) > private

当然,我们在使用的时候不必那么复杂,我们子类的返回值类型和权限修饰符一般等于父类的就行;

3. 案例

        比如一个手机类,其方法有接电话,但是不能显示联系人的头像和语音播报,于是我们通过继承和方法重写增添这两个功能;

public class FirstPhone {
    public void phone(){
        System.out.println("接电话");
        System.out.println("电话铃声");
    }
}
public class SecondPhone extends FirstPhone{
    @Override
    public void phone(){
        super.phone();//降低代码的冗余性,提高复用性
        System.out.println("显示头像");
        System.out.println("语音播报");
    }
}
public class PhoneDemo {
    public static void main(String[] args) {
        FirstPhone f=new FirstPhone();
        f.phone();
        System.out.println("===========");
        SecondPhone s=new SecondPhone();
        s.phone();
    }
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=5505:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo PhoneDemo
接电话
电话铃声
===========
接电话
电话铃声
显示头像
语音播报

进程已结束,退出代码0

二:继承中构造方法的调用

1. 子类的构造方法会默认调用父类的构造方法;

这是因为子类的构造方法中会默认存在 " super ( )  ; " 语句,从而优先调用父类的构造方法;

public class Fu {
    //构造方法
    public Fu(){
        System.out.println("这是父类的的构造方法啊");
    }
}
public class Zi extends Fu{
    //子类构造方法
    public Zi(){
        System.out.println("这是子类的构造方法");
    }
}
public class FuZiDemo {
    public static void main(String[] args) {
        Zi z=new Zi();
        }
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=7390:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo FuZiDemo
这是父类的的构造方法啊
这是子类的构造方法

进程已结束,退出代码0

2. super 关键字调用父类有参构造

        如果父类没有无参构造方法只有有参构造方法呢?

        我们可以调用父类的有参构造方法,调用时,需要使用“ super( 参数类型 参数名 )”;

        而且 只能放在子类方法的第一行;

public class Fu {
    //构造方法
    public Fu(int age){
        System.out.println("这是父类的的构造方法啊"+age);
    }
}
public class Zi extends Fu{
    //子类构造方法
    public Zi(){
        super(16);
        System.out.println("这是子类的构造方法");
    }
}
public class FuZiDemo {
    public static void main(String[] args) {
        Zi z=new Zi();
        }
}

 

3. 总结:

        子类必须调用父类的构造方法,不写会赠送 super(  ),写了则使用指定的super 调用,此外,super 只能有一个,且必须放在子类方法的第一行;

        比如下面,我重载了父类的构造方法,使用super调用时,一直报错,这就证明只能有一个

super()语句;

三:super 的用法

        前面既然提到了 super ,那咱们就详细介绍 super 的用法吧。

        (1)在子类的成员方法中,调用父类的成员变量;

        (2)在子类的成员方法中,调用父类的成员方法;

        (3)在子类的构造方法中,调用父类的构造方法;

                                                                                                                (注意前提条件)

public class Fu {
    String name;//成员变量
    //构造方法
    public Fu(int age){
        System.out.println("这是父类的的构造方法啊"+age);
    }
    //成员方法
    public void method1(){
        System.out.println("父类的成员方法");
    }
}
public class Zi extends Fu{
    //子类构造方法
    public Zi(){                        //调用父类的构造方法
        super(99);
    }
    
    public void method(){
        System.out.println(super.name);//调用父类的成员变量
        super.method1();               //调用父类的成员方法
    }
}

四:this 的用法

        说到 super 关键字的用法,我又想到了 this 关键字的用法;

        (1)在本类的成员方法中,调用子类的成员变量,以区分局部变量 ;

        (2)在本类的成员方法中,调用子类的另一个成员方法,(不用this也行),以从字面上强调调用的方法来自是本类 ;

        (3)在本类的构造方法中,调用本类的另一个构造方法 ;

A :构造方法的重载调用(本人记不住也不太明白这个名字),说人话就是在无参构造方法中使用 this关键字 调用有参构造方法 ;

B :this语句必须放在方法体的第一行,这与super语句也必须放在第一行冲突(在此类有父类的情况下),在此情况下,默认的 super语句 就不再提供了;

        这里的前提条件是 本类,与父子类和继承什么的毫无关系 ;

public class ThisDemo {
    String name="吃饭!";
    public ThisDemo(){                //调用本类一个参数的有参构造方法
       this(11);
    }
    public ThisDemo(int age){        //一个参数的有参构造方法调用本类两个参数的
        this(11,99);
    }

    public ThisDemo(int age1,int age2){//本类两个参数的构造方法调用父类的默认super语句

    }

    public void method(){
        String name="行,行,好";
        System.out.println(this.name);//访问本类成员变量
    }
    public void eat(){
        this.method();               //调用本类的成员方法,从字面上强调其来自本类
        System.out.println("不辜负爱与美食");
    }
}

五:案例

        前面说了super,this关键字的用法,我们不妨创建一个案例慢慢感知他们在实际应用中的作用:

public class Fu2 {
    String name="曹操操";
    public Fu2(){
        System.out.println("这是父类的构造方法");
    }
    public void method(){
        System.out.println("这是父类的成员方法");
    }
}
public class Zi2 extends Fu2{
    String name="刘备备";
    public Zi2(){
        super();//调用父类构造方法
        System.out.println("这是子类的构造方法");
    }
    @Override//注解尽量去写
    public void method(){
        String name="吕小布";
        System.out.println(name);;//调用局部变量
        System.out.println(this.name);//调用子类成员变量
        System.out.println(super.name);//调用父类成员变量
    }
}
public class FZ2Demo {
    public static void main(String[] args) {
        Zi2 z=new Zi2();//创建对象的同时,调用其构造方法;
        z.method();
    }
}
C:\Java\jdk-17.0.11\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=4366:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Test\classDemo\out\production\classDemo FZ2Demo
这是父类的构造方法
这是子类的构造方法
吕小布
刘备备
曹操操

进程已结束,退出代码0

 

六:最后

在Java中,继承只能是单继承,但是允许多级继承。

单继承:一个类只能有一个父类,就好像一个孩子只会拥有一个亲生爸爸一样;

多级继承:A类可以继承B类,B类可以继承C类,C类可以继承D类一样。也和我们现实生活中差不多。

此外,还可以有”兄弟类“,正如 A,B,C类 分别继承 D类 一样,一个父亲不只有一个孩子;

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

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

相关文章

基于MPPT最大功率跟踪和SVPWM的光伏三相并网逆变器simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪和SVPWM的光伏三相并网逆变器simulink建模与仿真。包括PV模块,MPPT模块,SVPWM模块,电网模块等。 2.系统仿真结果 1不…

JavaScript异步编程——04-同源和跨域

同源和跨域 同源 同源策略是浏览器的一种安全策略,所谓同源是指,域名,协议,端口完全相同。 跨域问题的解决方案 从我自己的网站访问别人网站的内容,就叫跨域。 出于安全性考虑,浏览器不允许ajax跨域获取…

二总线,替代传统485总线通讯,主站设计

二总线通信设计专栏 《二总线,替代传统485总线通讯,选型及应用-CSDN博客》《二总线,替代传统485总线通讯,低成本直流载波方案实现及原理-CSDN博客》《二总线,替代传统485总线通讯,调试避坑指南之最大的电流…

基于控制工程的牛鞭效应simulink建模与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 牛鞭效应”对供应链性能和绩效产生了严重的影响。基于控制理论建立了多级线性供应链的模型,分别利用噪声带宽和Matlab/Simulink对一个可扩…

【快捷部署】024_Hive(3.1.3)

📣【快捷部署系列】024期信息 编号选型版本操作系统部署形式部署模式复检时间024Hive3.1.3Ubuntu 20.04tar包单机2024-05-07 一、快捷部署 #!/bin/bash ################################################################################# # 作者:cx…

竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…

CopyClip for Mac - 高效复制粘贴,轻松管理剪贴板

CopyClip for Mac,一款专为Mac用户打造的剪贴板管理工具,让你在复制粘贴的日常任务中,享受到前所未有的高效与便捷。 它常驻在菜单栏中,时刻准备为你服务。一旦你复制了内容,CopyClip就会自动将其保存至历史记录中&…

使用ffmpeg对视频进行转码(支持浏览器播放)

在开发中,算法保存的mp4视频文件通过路径打开该视频发现视频播放不了,需要转码进行播放。使用java代码进行转码。代码如下,inputFilePath是转之前的视频路径,outputFilePath是转之后的视频路径。ffmpeg命令中libx264也可以改为其它…

经验浅谈!伦敦银如何交易?

近期,伦敦银价格出现很强的上涨,这促使一些新手投资者进入了市场,但由于缺乏经验,他们不知道该怎么在市场中交易,下面我们就从宏观上介绍一些方法,来讨论一下伦敦银如何交易。 首先我们要知道,要…

vue3创建响应式数据ref和reactive的区别

reactive和ref在Vue.js中都是用于创建响应式数据的,但它们之间存在一些区别 定义数据类型不同。ref主要用于定义基本数据类型,如字符串、数字、布尔值等;reactive主要用于定义对象(或数组)类型的数据,但re…

【uniapp】阿里云OSS上传 [视频上传]

引用uniapp插件市场的插件,使用的是视频上传 &#xff08;阿里云 oss上传&#xff09; 我只使用了H5和App端&#xff0c;需要后端配置跨域 yk-authpup详情请参考 》》【用户告知权限申请的目的】 【插件市场】阿里云存储OSS前端直接上传(全端通用) - 前端JASON <template>…

scikit-learn多因子线性回归预测房价

1.首先是单因子线性回归预测房价 import numpy as np import pandas as pd from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score# 1.读取csa房屋数据 path D:/pythonDATA/us…

【前端学习——css模块化】

https://segmentfault.com/a/1190000039772466#item-2 CSS 命名方法论 为选择器增加冗长的前缀或后缀&#xff0c;手写命名前缀后缀的方式来生成全局唯一的命名 很麻烦不方便 CSS Modules 在外部管理 CSS&#xff0c;然后将类名映射到组件内部&#xff0c;他会为每个 class 都…

[C++]哈希应用-布隆过滤器快速入门

布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是一个由布隆在1970年提出的概率型数据结构&#xff0c;它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器的主要特点是高效的插入和查询&#xff0c;可以用于检索一个元素是否在一个集合中。 原理…

box-decoration-break 使用介绍

box-decoration-break属性的使用 一、定义 box-decoration-break是CSS片段模块&#xff08;CSS Fragmentation Module Level 3&#xff09;中的一个属性&#xff0c;主要用于指定背景&#xff08;background&#xff09;、内边距&#xff08;padding&#xff09;、边框&#…

K邻近算法

简介 介绍了非常简单的算法&#xff1a;K邻近算法&#xff0c;即KNN。 基本介绍 K-近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基本且广泛应用的监督学习算法&#xff0c;主要用于分类和回归任务。 工作原理非常简答直观&#xff1a;所谓…

nginx: [emerg] invalid number of arguments in “alias“ directive in D:\nginx

问题背景 最近在配置一个nginx的配置&#xff0c;但是reload的时候遇到了以下报错 D:\nginx>nginx -s reload nginx: [emerg] invalid number of arguments in "alias" directive in D:\nginx/conf /nginx.conf:113 解决方案 关于“alias”指令中的参数数量错误…

十二届蓝桥杯Python组1月中/高级试题 第一题

** 十二届蓝桥杯Python组1月中/高级试题 第一题 第一题&#xff08;难度系数2&#xff0c;18 个计分点&#xff09; 编程实现&#xff1a; 输入一个字符串&#xff0c;输出这个字符串的最后一个字符。 输入描述&#xff1a;输入一个字符串 输出描述&#xff1a;输出这个字符串…

OpenCV单窗口并排显示多张图片

OpenCV单窗口并排显示多张图片 效果代码 PS&#xff1a;本例的代码适合图片的宽度和高度都相同。 效果 原始三张图片&#xff1a; 合并显示&#xff1a; 代码 import cv2 import numpy as npdef opencv_multi_img():# 读取图片img1 cv2.imread(saw_1.jpeg)img2 cv2.im…

2024软件测试自动化面试题(含答案)

1.如何把自动化测试在公司中实施并推广起来的&#xff1f; 选择长期的有稳定模块的项目 项目组调研选择自动化工具并开会演示demo案例&#xff0c;我们主要是演示selenium和robot framework两种。 搭建自动化测试框架&#xff0c;在项目中逐步开展自动化。 把该项目的自动化…