我正在努力了解为什么在Java中 需要方法重载和重写 ?
我已经阅读了一些与此相关的文章,但无法理解为什么实际上需要它?
我还访问了以下url,但在该主题中我还不清楚。
Java重载和覆盖
任何实际的例子将不胜感激。
提前致谢。
来自doc的
方法重载:
假设您有一个可以使用书法绘制各种类型的数据(字符串,整数等)的类,并且包含一个用于绘制每种数据类型的方法。为每个方法使用新名称很麻烦,例如drawString,drawInteger,drawFloat等。在Java编程语言中,您可以对所有绘图方法使用相同的名称,但可以将不同的参数列表传递给每个方法。因此,数据绘图类可能会声明四个名为draw的方法,每个方法都有一个不同的参数列表。
public class DataArtist {
...
public void draw(String s) {
...
}
public void draw(int i) {
...
}
public void draw(double f) {
...
}
public void draw(int i, double f) {
...
}
}
重载的方法通过传递给方法的参数的数量和类型来区分。在代码示例,draw(String s)
并且draw(int i)
是不同的和独特的方法,因为它们需要不同的参数类型。
您不能声明多个具有相同名称,相同数量和类型的参数的方法,因为编译器无法区分它们。
区分方法时,编译器不会考虑返回类型,因此即使两个方法具有不同的返回类型,也无法声明具有相同签名的两个方法。
*在面向对象程序设计中, *方法重写
是一种语言功能,它允许子类或子类提供其超类或父类之一已经提供的方法的特定实现。子类中的实现通过提供与父类中的方法具有相同名称,相同参数或签名以及相同返回类型的方法来覆盖(替换)超类中的实现。执行方法的版本将由用于调用该方法的对象确定。如果使用父类的对象来调用该方法,则将执行父类中的版本,但是如果使用子类的对象来调用该方法,则将执行子类中的版本。
问题内容: 已关闭 。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 Java为什么不需要运算符重载?Java有什么方法可以支持它吗? 问题答案: Java仅允许对基本数字类型进行算术运算。这是喜忧参半的事情,因为尽管在其他类型(如复数,向量等)上定义运算符很方便,但始终存在与实现相关的特性。因此,运营
问题内容: 在java中为什么需要覆盖equals和hashcode方法?什么时候用到? 问题答案: 让我们尝试通过一个示例来理解它,如果我们不进行覆盖而覆盖并尝试使用。 假设我们有一个类像这样那样的两个对象是相等的,如果他们等于(和生成) 仅覆盖 如果仅覆盖被覆盖,则在你第一次调用时将散列到某个存储桶,而在调用时将散列到其他存储桶(因为它们具有不同的)。因此,尽管它们是相等的,但由于它们没有散列
输出为"A的静态方法"。因此静态方法不会被重写,否则输出将是“静态方法B”。JVM如何在运行时决定调用类A而不是B的静态方法。
我对在我想要克隆对象的类中重写克隆方法感到困惑。 因为Java中的每个类都是从Object扩展而来的,所以它应该有clone方法,但是我们仍然被迫重写clone。为什么要求? 另外,我在一些地方阅读了重写克隆对象并将其公之于众的内容。我想知道,为什么会这样? 欢迎提供所有答案。
当我们不知道任何给定对象的finalize()方法何时可以运行时,我们需要在java中重写finalize()方法的哪里?我们可以在finalize()中关闭什么类型的资源?GC调用finalize()方法的最佳机会是什么?
重载方法和重写方法有什么区别?谁能举例说明一下吗?