java方法重载(简述重载与覆盖的区别java)

2025-03-21 02:20:03 0

java方法重载(简述重载与覆盖的区别java)

本文目录

简述重载与覆盖的区别java

重载: 在一个类当中才可以重载,方法名相同,参数个数不同或参数个数相同而参数类型不同。 覆盖: 又称重写,在派生类(子类)中重写基类(父类)的方法,名称、参数、类型都必须相同。

为什么Java不支持运算符重载

Java不支持运算符重载 = 小白也能学编程

Java之所以不支持运算符重载,并不是如下原因:

  1. 会使JVM变得复杂、性能下降:君不见C++内置运算符重载的能力?C++的性能在任何时代秒杀Java相信没有争议。
  2. 便于静态分析、工具化等:一叶障目、不见泰山。运算符重载只是一种动态特性,动态语言的形式化静态分析方法已经有成熟的方法论。
  3. Java是面向对象语言:Ruby是比Java更彻底的面向对象的语言,然而它对运算符重载的支持非常优秀,在Ruby中一切都是对象,几乎一切都可以override。

不支持运算符重载的根本原因,是源自James Gosling设计Java的初衷:那就是要让Java的学习门槛足够低,这样才能让这个编程语言被更多的人使用,从而拥有最大的市场占有率。

Java诞生之前, 基本上是C/C++的天下。光C语言的一个指针,就吓退了多少莘莘学子?C++引入更多的动态特性:多态、多重继承、函数重载、函数重写、运算符重载、泛型……这更不知道让多少人望而却步!

正是在那样的大环境下,James Gosling才萌生了“开发一个小白都能上手”的编程语言的念头。

运算符重载的底层思想并不是面向对象

运算符重载的底层逻辑来自函数式编程。它的祖师爷是Lisp,一个“从来被模仿、从未被超越”的神级语言。

可以负责任地讲,如今流行的Python、Javascript、Typescript、Go、Ruby、Haskell、Scala、Groovy等,在动态高级特性上都是在不断模仿60多年前的Lisp。包括Java从诞生起就在鼓吹的垃圾回收等优点,全部都是“偷师”Lisp。有兴趣的小伙伴可以自行下载Lisp的发明者——John McCarthy老爷爷1960年发表的GC论文。

函数式语言的核心思想其实是数学。

说得更白话一点:通过数学表达式描述问题,而不是人肉模拟解答过程。问题描述完了,也就解决了——运行时处理执行细节。

说得更学院派一点:通过无状态的函数加以其他优化特性,将这些函数组件进行拼接。

看到这里,估计有不少人要来拍砖:运算符重载看起来那么复杂,明明可以定义方法或者函数来解决,除了装逼格,没有实用价值。

笔者这里回应一下:数学本来就不是普通大众擅长的,数学的目的就是用最简洁的方式来解决最复杂的问题。所以函数式语言从诞生之初,就没有想过要芸芸众生。它追求的是大道至简。

这里来看一个例子:计算一组数据(假设放在一个一维数组中)的标准差。

如果不采用函数式编程,采用通常的面向过程或者面向对象的编程范式,那么只能:

第一步,先通过循环体(for/foreach/while等),挨个遍历求出平均值mean;

第二步,再来一次循环,挨个求与mean的差值并平方,然后逐个累加得到平方合sumOfSquares;

第三步,对sumOfSquares调用平方根函数,求出最终值standardDeviation。

下面我们来进化一点:

有基本函数式编程概念的小伙伴可能会写出如下的简化范式(这里以Ruby为例):

mean = a.inject {|x,y| x+y } / a.size

sumOfSquares = a.map{|x| (x-mean)**2 }.inject{|x,y| x+y }

standardDeviation = Math.sqrt(sumOfSquares/(a.size-1))

但是真正的函数式编程高手是会这样写的:

第一步:写一个通用的数学意义上的复合函数(f(g(x)) = f*g(x))的表达:

module Functional

def apply(enum)

enum.map &self

end

alias | apply

def reduce(enum)

enum.inject &self

end

alias 《= reduce

def compose(f)

if self.respond_to?(:arity) && self.arity == 1

lambda {|*args| self }

else

lambda {|*args| self }

end

end

alias * compose

end

第二步:把计算标准差所需要的各个元素的数学表达列示好:

sum = lambda {|x,y| x+y } # A function to add two numbers

mean = (sum《=a)/a.size # Or sum.reduce(a) or a.inject(&sum)

deviation = lambda {|x| x-mean } # Function to compute difference from mean

square = lambda {|x| x*x } # Function to square a number

第三步:像写标准差的数学表达式一样,一步到位:

standardDeviation = Math.sqrt((sum《=square*deviation|a)/(a.size-1))

总结

Java之所以流行,并不是因为其语言设计得最优秀,相反地,在很多地方——比如泛型、Lambda、完全面向对象等设计上都存在不足。它的成功在于:扬长避短,把所有牛X的高级语言特性在一开始全部都抛弃,留一个最小核,然后通过营销,大规模地培养本语言阵营的程序员,建立各种各样的“轮子”,成就了巨无霸的生态;在站稳格局之后,慢慢地再逐步添加回来一些以前抛弃的其他语言的优秀特性——这是一种比较实用的策略,但是带来的恶果就是:历史包袱比较重,导致新特性很多时候是“半残”的。

回到运算符重载本身,对于高手,可以利用该特性写出极具“魔性”、接近数学语言的代码,这样的代码可以体现“极简之美”——但是,一个不利影响就是:数学不好的小伙伴,不容易看得懂,也很难体会其中蕴含的“数学之美”。

Java中什么叫方法的重载

方法重载,这个概念是OOP中最长见的一个概念。是针对一个类内的方法而言的。

重载主要是针对的是类内同名的方法。只要方法名相同,而其它的不同——参数个数、类型、返回值等,只要有不同,就可视为重载。

另一个相似的概念是重写或覆写,针对的是类继承而言,主要是同方法名的,继承父类方法逻辑或完全重写对应方法逻辑。这里要注意的是,方法名、参数个数和类型以及返回值都要一致。

java方法重载(简述重载与覆盖的区别java)

本文编辑:admin
java方法重载 ,java

更多文章:


sqlmap(sqlmap怎么注入sql server)

本文目录sqlmap怎么注入sql server怎么用sqlmap测试登录注入如何使用sqlmap进行sql注入sqlmap怎么注入sql server当给sqlmap这么一个url的时候,它会:1、判断可注入的参数2、判断可以用那种SQL

2025年2月14日 04:30

线程锁synchronized和lock区别(java lock和synchorinzed的区别)

本文目录java lock和synchorinzed的区别synchronized和lock的区别多线程安全实现方式,synchronized和lock,信号量的区别java如何实现线程安全,synchronized和lock的区别,可重入

2025年2月10日 02:20

bytedance是什么意思(bytedance是什么文件夹可以删除吗)

本文目录bytedance是什么文件夹可以删除吗@bytedance.com是什么邮箱啊没见过啊bytedance是什么文件夹可以删除吗可以删除。这不是系统软件,需要保存自己的游戏档案,空文件夹可以删除。北京字节跳动科技有限公司是一家信息技

2025年4月3日 02:00

corinthian(2 corinthians是什么意思)

本文目录2 corinthians是什么意思1 corinthians是什么意思2 corinthians是什么意思2 corinthians哥林多后书corinthian: adj. 1.科林斯(人)的;【建筑】(古希腊)科林斯(

2025年3月8日 08:40

discuzx2(如何将 DiscuzX2 附件存储目录缓存为相对路径)

本文目录如何将 DiscuzX2 附件存储目录缓存为相对路径DiscuzX2管理后台路径怎么修改Discuz! X2花钱吗discuz和discuzx有什么区别Discuz6.1.0Release能升级到x2.5吗如何将 DiscuzX2

2025年2月24日 04:20

c语言中static是什么意思(static在C语言中指什么有着什么样的作用)

本文目录static在C语言中指什么有着什么样的作用c语言中的static是什么static在C语言中指什么有着什么样的作用在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)第一个作用:隐藏。当我们同时编译多

2025年4月3日 09:30

offense是什么意思(punishable offense里offense在网上查只有进攻的意思)

本文目录punishable offense里offense在网上查只有进攻的意思criminal offense 什么意思punishable offense里offense在网上查只有进攻的意思offense of.fensecrim

2025年3月28日 09:10

源码上传服务器教程(建站从上传源码到建站完成都有什么步骤啊,详细点,最后语言简单易懂)

本文目录建站从上传源码到建站完成都有什么步骤啊,详细点,最后语言简单易懂php网站如何配置有现成的完整源码怎么传到服务器上,需要什么工具吗怎么将网站源码传到阿里云服务器 (我备案成功了 ) 求大神 本人小白centos7搭建的服务器怎么上传

2025年2月26日 19:40

enterpassword什么意思中文(电脑显示enter password什么原因造成的)

本文目录电脑显示enter password什么原因造成的电脑进入蓝屏后出现英文EnterpaSSWOrd是什么意思enter your password什么意思装系统出现Enter Password,是什么意思电脑上出现了“enter p

2025年2月26日 10:30

forums怎么读(讲座和学校礼堂用英语怎么说)

本文目录讲座和学校礼堂用英语怎么说fora和forums的区别是什么讲座和学校礼堂用英语怎么说1. 讲座a course of lectures 2. 专题讲座Forums and Lectures 3. 学术讲座academic

2025年3月14日 13:20

输入法怎么设置(输入法怎么设置)

本文目录输入法怎么设置windows 8输入法怎么设置电脑输入法如何设置默认电脑输入法怎么设置搜狗输入法手机默认输入法怎么设置电脑输入法如何设置电脑上如何设置输入法电脑输入法怎么设置ubuntu 10.04 输入法怎么设置!!!!oppo输

2025年2月14日 10:50

parameter是什么意思中文翻译(parameter 是什么意思)

本文目录parameter 是什么意思parameter翻译过来什么意思参数英文是什么意思parameters这词什么意思parameter是什么意思parameter 是什么意思parameter 参数, 系数, 工业生产预测法p

2025年3月11日 19:30

英语中no和not 的用法区别,请举例说明?not后面可以加什么

本文目录英语中no和not 的用法区别,请举例说明not后面可以加什么not是什么意思绝地求生出现Not Found怎么回事,怎么办not的用法“not”是什么意思annotation是什么意思英语中no和not 的用法区别,请举例说明一、

2025年3月21日 21:50

python安装numpy库(python3.7怎么安装pip,怎么装numpy库)

本文目录python3.7怎么安装pip,怎么装numpy库Python3.6无法安装numpy,如何解决python3.6怎么安装numpy库在python怎么安装numpy scipy pandaspython3.7怎么安装pip,怎么

2025年3月3日 09:20

chown什么意思(chown zhangsan :tech abc.txt 这条命令什么意思能讲一下chown的作用吗)

本文目录chown zhangsan :tech abc.txt 这条命令什么意思能讲一下chown的作用吗chown -r在linux里是什么含义,我一直搞不清楚.英语“brown”是什么意思chown zhangsan :tech ab

2025年4月14日 09:40

msde数据库(安装速达3000std单机版安装msde数据库时安装到一半时出现“指定的实例名无效”的提示,怎么办)

本文目录安装速达3000std单机版安装msde数据库时安装到一半时出现“指定的实例名无效”的提示,怎么办MSDE数据库要怎么打开啊中顶软件自带MSDE数据库如何转换成SQL数据库安装速达3000std单机版安装msde数据库时安装到一半时

2025年3月20日 10:30

ftp 软件(什么是FTP软件)

本文目录什么是FTP软件ftp软件有哪些什么是FTP软件 FTP(FileTransferProtocol),是文件传输协议的简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过

2025年4月13日 22:00

delphi入门教程(有前端基础,学过delphi,现想学python flask,需要多长时间可以掌握)

本文目录有前端基础,学过delphi,现想学python flask,需要多长时间可以掌握会delphi想学JAVA需要多久有前端基础,学过delphi,现想学python flask,需要多长时间可以掌握感谢邀请。如果有其他语言的基础,再

2025年4月13日 19:10

mysql explain详解(mysql 数据库 explain 怎么用)

本文目录mysql 数据库 explain 怎么用explain mysql 什么作用mysql explain是什么命令mysql中explain执行结果中的rows究竟是怎么个统计原理explain有何用 mysqlmysql 数据库

2025年3月2日 04:00

define(c语言define用法是什么)

本文目录c语言define用法是什么c语言define用法英语define 的中文意思是什么definite和defined的区别(不是都有明确的 的意思么)PHP中define函数是有什么用的php中define里面填什么参数c语言de

2025年3月20日 16:40

近期文章

2025-04-14 21:20:08
本站热文

2025-02-22 17:40:03 浏览:20
2025-02-10 23:40:06 浏览:7
2025-02-14 06:00:02 浏览:7
标签列表

热门搜索