【发布时间】:2014-11-08 16:19:45
【问题描述】:
方法重载支持多态性,因为它是 Java 实现单接口、多方法范式的一种方式。
为了理解如何,我考虑了以下几点。在不支持方法重载的语言中,
每个方法都必须有一个唯一的名称。但是,我经常会想从本质上实现
不同类型的数据使用相同的方法。考虑绝对值函数。在语言中
不支持重载的,这个函数通常有3个或更多版本,每个都有
一个稍微不同的名字。例如在 C 中,函数 abs() 返回一个绝对值
整数,labs()返回长整数的绝对值,fabs()返回绝对值
的浮点值。由于 C 不支持重载,因此每个函数都必须有自己的
自己的名字,即使所有 3 个函数基本上做同样的事情。这使得情况
从概念上讲,比实际情况更复杂。虽然每个函数的底层概念
是一样的,我会记住3个名字。这种情况在 Java 中不会发生,因为每个
绝对值方法可以使用相同的名称。事实上,Java 的标准类库包括一个
绝对值方法,称为 abs()。这个方法被 Java 的 Math 类重载来处理所有
数字类型。 Java 根据参数类型确定调用哪个版本的 abs()。
没有规定重载方法必须相互关联。然而从一个 从文体上看,方法重载隐含着一种关系。因此,虽然我可以使用 重载无关方法的同名,我想我不应该。例如,我可以使用 命名 sqr 来创建返回整数平方和浮点数平方根的方法 点值。但这两种操作是根本不同的。在中应用方法重载 这种方式违背了它的初衷。
那么在实践中,我应该只重载密切相关的操作吗?除此以外还有其他使用重载方法的理由吗?
【问题讨论】:
-
您应该在需要时重载(即,当它会增加代码的维护者/读者的清晰度时)。
-
所以我需要更多地考虑方法名称,而不是业务逻辑:D
-
重载用于对不同类别的数据进行相同类型的处理
-
在您的示例中,您建议将方法名称
sqr用于平方根和平方根。这不是重载的有效应用程序,尽管在语法上它可以工作 -
@CocoNess:我没有建议过。
标签: java polymorphism overloading