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{@Overridepublic 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类 一样,一个父亲不只有一个孩子;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Go语言并发编程

随着计算机硬件的发展,多核处理器已经成为现代计算机的主流配置。在这样的背景下,并发编程成为了一种必备的技能。Go 语言作为一门先进的编程语言,天生支持并发编程,提供了丰富的并发原语和工具,使得并发编程变得更加容…

C#中实现DataGridView数据的优雅Excel之旅(EPPlus)

DataGridView效果图: EXCEL效果图: 代码如下: 首先要引入EPPlus包 可以使用命令行来安装 Install-Package EPPlus 也可以使用NUGet搜索EPPlus来安装 public Homes(){InitializeComponent();ExcelPackage.LicenseContext OfficeOpenXml.LicenseContext…

Unity打开安卓设备不同的设置面板

1,打开安卓设备不同的设置面板,我还贴心的把Android官网的链接放下面了 2,使用也很方便:unity按钮事件上拖这个脚本,注册MyOpenAndroidSettings方法,参数 填 和枚举值相应的数字 // 功能:打开…

Python基础详解三

一,函数的多返回值 def methodReturn():return 1,2x,ymethodReturn() print(x,y) 1 2 二,函数的多种参数使用形式 缺省参数: def method7(name,age,address"淄博"):print("name:"name",age"str(age)&quo…

Golang——IO操作

1. 输入输出的底层原理 终端其实是一个文件(Linux下一切皆文件),相关实例如下: os.Stdin:标准输出的文件实例,类型为*Fileos.Stdout:标准输入的文件实例,类型为*Fileos.Stderr:标准错误输出的文…

出差——蓝桥杯十三届2022国赛大学B组真题

问题分析 该题属于枚举类型&#xff0c;遍历所有情况选出符合条件的即可。因为只需要派两个人&#xff0c;因此采用两层循环遍历每一种情况。 AC_Code #include <bits/stdc.h> using namespace std; string str;//选择的两人 bool ok(){if(str.find("A")!-1…

Colibri for Mac v2.2.0 原生无损音频播放器 激活版

Colibri支持所有流行的无损和有损音频格式的完美清晰的比特完美播放&#xff0c;仅使用微小的计算能力&#xff0c;并提供干净和直观的用户体验。 Colibri在播放音乐时使用极少的计算能力。该应用程序使用最先进的Swift 3编程语言构建&#xff0c;BASS音频引擎作为机器代码捆绑…

java11基础(接口 static关键字)

目录 一. 接口 1. 接口的定义 2. 接口的实现 3. Comparable接口 4. 抽象类和接口的区别 小结 二. static关键字 1. 静态成员变量 2. static 静态方法 3. static静态代码块 格式: 作用: 执行顺序: 三. 接口拓展 default 和 static 一. 接口 如果一个抽象类没有字段…

【氮化镓】GaN功率器件在转换器设计中的挑战

I. 引言(INTRODUCTION) 宽带隙(WBG)器件的重要性: 引言部分首先强调了宽带隙(WBG)器件在高频、高效率电力电子技术中的关键作用。这些器件,包括碳化硅(SiC)和氮化镓(GaN),相较于传统的硅功率器件,具有显著的优势。宽带隙半导体材料的高击穿场强允许设计更薄的漂…

Hive SQL-DML-insert插入数据

Hive SQL-DML-insert插入数据 1. 插入静态数据 可以直接插入具体的值到Hive表中&#xff1a; INSERT INTO TABLE tablename (column1, column2, column3) VALUES (value1, value2, value3),(value4, value5, value6),...;2. 插入查询结果 将一条查询的结果直接插入到另一个表中…

数据猎手:使用Java和Apache HttpComponents库下载Facebook图像

引言 在信息驱动的时代&#xff0c;互联网上的数据成为了无可比拟的宝藏。本文旨在探讨如何通过利用Java和Apache HttpComponents库&#xff0c;从全球最大的社交网络平台Facebook上获取图像数据。 作为全球最大的社交网络平台&#xff0c;Facebook聚集了数以亿计的用户&#…

uniapp——点赞、取消点赞

案例 更新点赞状态&#xff0c;而不是每次都刷新整个列表。避免页面闪烁&#xff0c;提升用户体验 代码 <view class"funcBtn zan" click"onZan(index,item.id)"><image src"/static/images/circle/zan.png" mode"aspectFill&…

富文本编辑器CKEditor4简单使用-07(处理浏览器不支持通过工具栏粘贴问题 和 首行缩进的问题)

富文本编辑器CKEditor4简单使用-07&#xff08;处理浏览器不支持通过工具栏粘贴问题 和 首行缩进的问题&#xff09; 1. 前言——CKEditor4快速入门2. 默认情况下的粘贴2.1 先看控制粘贴的3个按钮2.1.1 工具栏粘贴按钮2.1.2 存在的问题 2.2 不解决按钮问题的情况下2.2.1 使用ct…

【QuikGraph】C#调用第三方库实现迪杰斯特拉(Dijkstra)算法功能

QuikGraph库介绍 项目地址&#xff1a;https://github.com/KeRNeLith/QuikGraph QuikGraph为.NET提供了通用的有向/无向图数据结构和算法。 QuikGraph提供了深度优先搜索、广度优先搜索、A*搜索、最短路径、k最短路径&#xff0c;最大流量、最小生成树等算法。 QuikGraph最初…

MacOS miniconda安装方法

打开macos “终端” 应用 执行命令 mkdir -p ~/miniconda3curl https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.shbash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3rm -rf ~/miniconda3/mini…

【35分钟掌握金融风控策略16】贷前风控策略详解-1

目录 贷前风控策略详解 贷前风控目标 精准审核申请贷款客户资质 对申请贷款客户进行合理定额 对申请贷款客户进行合理定价 推动实现利润最大化 贷前风控数据源 客户贷款时提供的数据 贷前风控策略详解 俗话说&#xff0c;良好的开端是成功的一半&#xff0c;而贷前是风…

SpringCloud面试题

SpringCloud常见组件有哪些 注册中心组件&#xff1a;Eureka、Nacos 负载均衡组件&#xff1a;Ribbon 远程调用组件&#xff1a;OpenFeign 网关组件&#xff1a;Zuul、Gateway 服务保护组件&#xff1a;Hystrix、Sentinel 服务配置管理组件&#xff1a;SpringCloudConfig、Nac…

docker 部署etcd集群

docker 部署etcd集群 往期内容 ETCD 简介 前言 上期我们对于分布式kv存储中间件有了简单的认识&#xff0c;本期简单介绍docker-compose 部署etcd集群以及可视化工具 etcd Keeper 1-etcd docker 部署 看了很多网上部署的教程&#xff0c;要么超级简陋&#xff0c;要么搞一堆…

kubernetes附加组件—图形化管理工具Dashboard

一、介绍 Dashboard是k8s集群管理的一个WebUi&#xff0c;它是k8s的一个附加组件&#xff0c;需要单独部署。 我们可以通过图形化的方法&#xff0c;创建、删除、修改、查询k8s资源。 二、安装部署dashboard组件 Github地址&#xff1a;GitHub - kubernetes/dashboard: Gen…

centos8.5 安装 redis 7.2.4 详细步骤

1 下载Index of /releases/ (redis.io) 通过xftp等方式上传到服务器&#xff0c;安装依赖包 yum install gcc gcc-c make tcl -y [rootlocalhost software]# ll total 3308 -rw-r--r--. 1 root root 3386861 May 3 21:56 redis-7.2.4.tar.gz [rootlocalhost software]# ll…