博客
关于我
java 重载、重写、重构的区别
阅读量:790 次
发布时间:2023-01-27

本文共 1906 字,大约阅读时间需要 6 分钟。

Java 运算符重载、重写与重构——概念与实现

在Java编程中,运算符重载、方法重写与重构是面对面 encountered 的基础概念。本文将深入探讨这三者之间的区别与各自的实现方法,帮助开发者更好地理解并正确运用。


1. 操作符重载

在Java中,运算符重载允许在同一类中定义多个具有相同名称但参数类型不同的方法。这种机制非常常用,尤其是当需要处理不同数据类型时。

public class ReLoad {    public ReLoad(int a, int b) {        System.out.println("a + b");    }    public ReLoad(int a) {        System.out.println("a");    }}

OPERATOR OVERLOAD 的核心在于通过不同的参数类型实现功能的多样化。例如,上述代码定义了两个构造函数,能够接受两个整数或一个整数作为参数,分别输出相应的信息。

运算符重载的应用场景非常广泛,尤其在处理日期、向量等复杂数据类型时,通过重载运算符可以显著提升代码的可读性与便利性。


2. 方法重写与重构

在Java中,重写(override)和重构(refactoring)是继承中的关键概念。这些机制仅在子类中实现,且与继承的特性密切相关。

方法重写

方法重写允许在子类中重定义父类的方法。子类方法的唯一要求是方法名和参数类型与父类方法完全一致。通过重写,可以改变方法的实现逻辑,甚至修改返回值类型和存储权限。

public abstract class ExtendsTest {    protected int adds(int a, int b) {        int s = 0;        s = a + b;        return s;    }    protected ExtendsTest doIt() {        return null;    }}public class tests extends ExtendsTest {    public int adds(int a, int b) {        return a;    }    protected tests doIt() {        return null;    }}

重写默认会自动识别参数的类型,当子类方法与父类方法完全一致时,Java会自动呈现重写行为。如果不重写,则会触发报错并提示方法是否重写了错误的方法。

方法重构

重构是继承中的另一种特殊重写方式,只重写子类方法的实现内容。与方法重写不同,重构不允许改变方法的参数类型、返回值类型等静态信息。仅仅是对实现内容的改写。

public class tests extends ExtendsTest {    @Override    protected int adds(int a, int b) {        System.out.println("重构");        return a + b;    }    @Override    protected tests doIt() {        return null;    }}

重构广泛应用于代码优化,例如调整变量命名、简化流程等。


3. 重构

重构是继承中的特殊重写方式,它对子类方法的实现内容进行改写,但其他属性如方法名、参数类型、大量未变。重构通常用于优化代码结构,提升可维护性。

public class tests extends ExtendsTest {    @Override    protected int adds(int a, int b) {        return a;    }    @Override    protected tests doIt() {        return null;    }}

重构与方法重写的区别在于,重构仅修改实现逻辑,而其他属性保持不变。只有在子类继承父类时,才可能发生重构。


重载、重写与重构的区别总结

  • 运算符重载:允许多个具有相同名称但参数类型不同的方法共存,用于处理不同数据类型。
  • 方法重写:在子类中重定义父类方法的实现,要求方法名和参数类型完全一致。
  • 方法重构:对子类方法实现内容进行改写,保留方法名和参数类型不变。

理解这些概念的区别对于Java程序的存储与继承具有至关重要的意义。正确运用这些机制,可以显著提升代码的复杂性与可维护性,同时减少代码冗余。

转载地址:http://bfryk.baihongyu.com/

你可能感兴趣的文章
Linux系列:Linux目录分析:[/] + [/usr] + [/usr/local] + [/usr/local/app-name]、Linux最全环境配置 + 动态库/静态库配置
查看>>
mysql系列:远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
查看>>
Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务、snmp服务
查看>>
PHP系列:PHP 基础编程 2(时间函数、数组---实现登录&注册&修改)
查看>>
PHP系列:使用PHP实现登录注册功能的完整指南
查看>>
Python&aconda系列:cmd/powershell/anaconda prompt提示“系统找不到指定的路径”(亲测有效)
查看>>
Python&aconda系列:(W&L)Conda使用faiss-gpu报错及解决办法、安装numpy的坑、cmd执行Python脚本找不到第三方库、安装tensorflow-gpu时遇到的from
查看>>
python&anconda 系列:Pycharm在debug问题的N种解决方案(一般程序、web方向、人工智能方向)
查看>>
python&anconda系列(亲测有效):tensorflow AttributeError: ‘str’ object has no attribute ‘decode’
查看>>
python&anconda系列:tf.keras.backend.get_session()和keras.backend.get_会话()返回不同的会话对象(待解答)
查看>>
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument".
查看>>
#if 0 #elif 1 #else #endif 用法
查看>>
(反射+内省机制的运用)简单模拟spring IoC容器的操作
查看>>
(转)tomcat7.0 manager app和host manager web管理
查看>>
.Net(C#)实现异步编程
查看>>
.Net中webBrowser控件JS交互
查看>>
02-Docker镜像分类及操作秘籍,轻松掌握导出、导入、删除
查看>>
04-docker-commit构建自定义镜像
查看>>
04-docker系列-commit构建自定义镜像
查看>>
05-docker系列-使用dockerfile构建镜像
查看>>