课时62:方法覆写

简介: 子类与父类一旦产生了继承关系之后,实际上子类会继承父类中全部定义。但是这里面也有可能出现不合适的场景。1.定义2.释义

课时62:方法覆写

摘要:子类与父类一旦产生了继承关系之后,实际上子类会继承父类中全部定义。但是这里面也有可能出现不合适的场景。

1. 定义

2. 释义

 

做一个最简单的举例,比如现在为止,一家工厂可能是生产手机的,但到今天为止还只是生产功能机,只能打个电话和发短信,这手机便没人买。同一个时代对手机的定义是不一样的,但是不管怎么样,都是手机。如果发现父类中设计不足并且需要保留有父类中的方法或者属性名称的情况下就会发生覆写。


现在手机都说在造手机,但是90年代的造手机就是打电话、发短信。当年的口号是:“呼机、手机、商务通一个不能少”,但是现在手机是一个集功能性、娱乐性与网络能以一身的。手机一直在变化,概念已经被不断的推翻,并且不断的重写。但其基本的样貌仍在被保留着,这种情况叫做覆写操作。

 

 

01. 定义

 

当子类定义了与父类方法名称相同,参数类型及个数完全相同的(跟父类方法一模一样)时候,就称为方法的覆写。

 

02. 释义

 

观察方法覆写。先给它去掉,跟上一个“class”,找到“channel”。代码如下:

class Channel {

跟上一个“vord”,跟上一个“connect”。代码如下:

class Channel { 
public void connect () {}

明确做一个描述“channel”的一个复位,明确表示资源的连接。代码如下:

class Channel { 
public void connect () {}
System.out.println (

跟上一个“channel“,等于”new channel“。代码如下:

class Channel { 
public void connect () {}
System.out.println (“Channel父类】进行资源的连接。”) ;
}
}
public class JavaDemo {
public static void main(String args [] ) {
Channel channel = new Channel () ;

完成之后,这个代码如果要去调用的时候,这个方法应该是执行(【(Channel】父类)输出。

在编译中,代码执行--父类调用。代码如下:

D:\mldnjava>javac JavaDemo. java
D:\mldnjava>java JavaDemo
林中强
D:\mldnjava>javac JavaDemo. java
D:\mldnjava>java JavaDemo
【Channel父类】进行资源的连接。
D: \mldnjava>_

  image.png

现在以(020404_【★★★★★】覆写.txt)程序为例。

在这个程序中,跟上一个“class“,叫做”database channel”,表示连数据库。代码如下:

class Channel { 
public void connect () {}
System.out.println (“【Channel父类】进行资源的连接。”) ;
}
}
class DatabaseChannel extends channel { // 要进行数据库连接

真正去连接,在没有做任何定义的情况下,用的是父类的方法,编译执行。但是父类的连接资源面太广,需要摘写,连接数据库。虽然泛指方法不好用,但是方法名称很标准,这个方法应该被继续保留下来。

当它不好用时,加覆写,保留已有的方法名称,而后进行覆写。代码如下:

class Channel { 
public void connect () {}
System.out.println (“【Channel父类】进行资源的连接。”) ;
}
}
class DatabaseChannel extends channel { // 要进行数据库连接
public void connect () { // 保留已有的方法名称,而后进行覆写
 
跟上一句话”out.print”,找到一个格式 “子类”。代码如下:
class Channel { 
public void connect () {}
System.out.println (“【Channel父类】进行资源的连接。”) ;
}
}
class DatabaseChannel extends channel { // 要进行数据库连接
public void connect () { // 保留已有的方法名称,而后进行覆写
System.out.println ("【子类】进行数据库资源的连接。“);

 

【子类】进行数据库资源的连接。整个程序代码跟之前最大的不同是方法名称被保留了。因为方法好用是个标准,所有人都用这个方法。但是这个方法实现不好,按现在的方式实现更加好一些。

现在保留这个方法,而当保留之后,再一次调用这个方法的时候,实例化的是子类。按照就近查找,子类有 connect 。

代码一编译,程序一执行,就是子类资源。代码如下:

}
public class JavaDemo {
public static void main(String args[]) {
DatabaseChannel channel = new DatabaseChannel();
channel.connect() ;
}
}

image.png

在这个时候就发生了方法的覆写。由于现在实例化的是子类(Database Channel)对象,所以此时调用的方法一定是被子类所覆写过的方法,如果该方法没有被覆写过,那么将调用父类中提供的方法,覆写的意义是在于:优化父类的功能。

image.png

举例:假如谈论一个人,一个人可能是覆写意义。现在做一个很简单的设计,准备一个人,一般情况下,当人岁数大一点的时候,有人会问:“人生成就是什么?”于是侃侃而谈:“一天内吃了80个棒棒糖,结果牙全掉了”,这是成就。

image.png

往下走,不同的人会有不同成就,作为一个学生而言,去谈人生成就,那么人生成就可能是:“从斯坦福博士后毕业回归,报效国家”。

image.png

如果是职员,职员的人生成就是什么?以高登为例,年薪300万期权,股票3000万,迎娶黑穷丑,孩子十个。

image.png

人是有功利的,如人生成就:“我是个人,一个可以正常生活的人到80岁不用尿不湿”。

讨论覆写的意义,通过这样一个设计能看出来。所有人都可能去谈人生成就,于是这个时候大家发现,作为一个人应该高兴。因为我们是属于生物链的顶端,不会是生物链的底端。人是生物链的顶端,而且在这个顶端之中,有自己的思想,有自己的知识,有自己追求幸福和人的行为,还可以追求黑穷丑。


所以覆写的意义在于要保留操作,根据不同的阶段来定义不同的状态。从这个代码的本质来讲,保留了已有的方法的名称,这就好比个人的成就。


在子类进行方法覆写之后,如果现在要想继续调用父类中的方法,那么就必须使用“super.方法()”。成就必须保证你是人才有这些成就。进行数据库连接之前,应该获得一些其他连接。

image.png

直接写上“connect”,要调用复位中的方法。但实际上编译执行就死。 代码如下:

class Channel { 
public void connect () {}
System.out.println (“【Channel父类】进行资源的连接。”) ;
}
}
class DatabaseChannel extends channel { // 要进行数据库连接
public void connect () { // 保留已有的方法名称,而后进行覆写
connect() ;

 

在“connect()“这个地方什么都不加,描述的是“this.”。从本位先找,不能找到“connect”,应明确表示不从本位找,直接找复位。加“super”表示直接调用父类复位中的方法。


在进行代码编写的过程之中,一定要记住一个关键性的问题。只要是在子类中调用父类方法的时候,一定要在方法前追加“super.”。这个操作至关重要,实现了方法的覆写,容易实现。

相关文章
|
JSON 算法 安全
不破不立!Fastjson2.0 性能炸裂,为了下一个十年
Alibaba Fastjson: 目前在人类已知范围内,这个星球跑的最快的Java JSON库。在过去的十年里,fastjson v1作为国内github star最多和最受欢迎的json解析库,如今fastjson v2 重磅来袭,性能炸裂。
18621 2
不破不立!Fastjson2.0 性能炸裂,为了下一个十年
|
JSON 数据格式 开发者
Postman模仿GET/POST请求进行接口的本地测试
接口是软件开发中常用的概念,是软件生产过程中比较核心的任务。对于接口开发者,调试接口是一件较为繁琐的事情,很多时候需要线上线下来回切换。在这里,我就跟大家介绍一个只需要在本地就可以调试接口的方法。
644 0
|
canal 关系型数据库 中间件
开源数据同步神器——canal
作为使用最广泛的数据库,如何将mysql的数据与中间件的数据进行同步,既能确保数据的一致性、及时性,也能做到代码无侵入的方式呢?如果有这样的一个需求,数据修改后,需要及时的将mysql中的数据更新到elasticsearch,我们会怎么进行实现呢?
18029 1
|
SQL 数据可视化 安全
免费的可视化Web报表工具,JimuReport v1.4.4-beta版本发布
积木报表,一款免费的可视化Web报表工具,像搭建积木一样在线拖拽设计!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! 秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、节省成本、解决各类报表难题,完全免费的!
690 0
|
6月前
|
数据管理 测试技术 API
解决 Postman Collection Runner 限制的最佳解决方案
Postman 限制了 Collection Runner 的使用。使用其他的 Postman 替代工具是解决这个问题的最佳方案。
|
缓存 前端开发 JavaScript
微前端集成优化:让所有子应用体积更小,加载更快!
【8月更文挑战第17天】微前端集成优化:让所有子应用体积更小,加载更快!
326 1
微前端集成优化:让所有子应用体积更小,加载更快!
|
6月前
|
算法 Java Python
使用Python来绘制樱花树
本文以林徽因的《你是人间的四月天》为引,将春日意象与现代职场编程艺术结合,通过Python的Turtle模块绘制分形树和花瓣图案。文章详细解析了Turtle模块的使用方法、递归算法及随机性在图形生成中的应用,展示了如何用代码创造自然美感。核心代码包含tree函数(绘制分形树)和petal函数(绘制花瓣),最终生成一幅生动的春日画卷。项目不仅帮助读者掌握Turtle绘图技巧,更激发对编程艺术的兴趣,鼓励探索数字世界的无限可能。
157 5
|
运维 关系型数据库 MySQL
面试题MySQL问题之MySQL集群的单点失效如何解决
面试题MySQL问题之MySQL集群的单点失效如何解决
217 2
【IntelliJ IDEA】解决idea无法输入中文的问题
【IntelliJ IDEA】解决idea无法输入中文的问题
2981 1