java - 以下哪种方法在子类中是合法的?

标签 java methods arguments return-value subclass

我对如何在子类中创建方法感到困惑。我的头撞到了砖墙上,甚至不知道如何表达这个问题。

import java.io.*;
public class A {
   public double method1(double x, double y) { return 1.0;  }
}
class B extends A {
   //subclass method to be placed after this line

}
<小时/>
  1. public double method1(double x, double y) { ... }
  2. public int method1(double x, double y) { ... }
  3. public double method1(int x, int y) { .... }
  4. public int method1(double x, double y, double z) { ... }

以下哪种方法在子类中是合法的,为什么?

最佳答案

  1. 使用新功能覆盖方法1。

  2. 非法,因为它具有相同的参数签名但返回类型不同。

3,4。合法但实际上是不同的方法。

只需将参数类型视为方法名称的一部分即可:

  • 仅当名称加上参数类型完全匹配时,您才能使用新功能重写相同的方法。在这种情况下,返回类型必须匹配(从Java 1.5开始,返回类型可能在子类中专门化,参见 https://blogs.oracle.com/sundararajan/entry/covariant_return_types_in_java )

  • 在其他情况下,添加的方法只是具有相同名称的单独方法。 Java 在编译时根据提供的参数类型静态地为每次调用选择正确的参数类型。如果参数兼容并且多个方法的名称相同,它将选择最接近的匹配。

关于java - 以下哪种方法在子类中是合法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19890249/

相关文章:

java - RESTful Web 服务可以从子线程返回 POST 响应吗?

java - 所有浏览器驱动程序和代码的 Selenium Java 基类是多余的

javascript - 向数组中添加一个新对象

objective-c - 如何在子类中正确覆盖 Objective-C 中的类方法?

javascript - 如何用动态类型语言描述函数参数?

c++ - "Error: function does not take 4 arguments"但确实如此

typescript - 带有用 Typescript 编写的参数的 vuex getter

java - 如何使用 Java 确定 Google AppEngine 数据存储区中给定键的对象是否存在?

java - Android点击按钮自动发送短信

java - 创建一个新数组,其中包含目标值每次出现的索引