【问题标题】:Java class method defines String type, takes int as param and returns nullJava类方法定义String类型,以int为参数,返回null
【发布时间】:2017-04-02 08:54:46
【问题描述】:

现在刚接触一些 Java。在 OCA 7 书中看到了这个扩展类,只是想知道 Baz 类如何使用 go 方法并期望返回类型 String 但参数采用 int。然后返回为空。

Baz 是合法构造还是会返回编译错误?我的意思是它返回类型 String,但接受一个 int 参数,然后返回 null。这怎么可能?

public class Foo {
    void go() {}
}

public class Baz extends Foo {
    String go(int x) {
        return null;
    }
}

【问题讨论】:

  • go()go(int) 相当 different methods。不要混淆它们具有相同的名称。他们的签名不同。
  • @dhke 我认为他根本不关心继承。他只是对它应该返回 String 时返回 null 感到困惑。
  • "Baz 是合法的构造还是会返回编译错误?"那么,当你尝试它时发生了什么?
  • 这是书上的,我没用IDE

标签: java types


【解决方案1】:

由于Baz 扩展了Foo,它将继承Foogo() 方法。

另外Baz 声明了它自己的方法go(int x),返回类型为String。这是两种不同的方法,编译器会这样对待它们,因为它们有不同的signature(= 名称 + 参数类型)。如果唯一的区别是返回类型,那么你会得到一个编译错误。

因为签名不同,编译器总是可以告诉你要调用哪个方法——在这种情况下,取决于你在调用go时是否传递int作为参数。

这就是为什么 Baz 是一个完全有效的 Java 类。

编辑:go(int x) 可以返回 null,因为 String 是一个类。当需要引用类的实例时,您始终可以传递/返回null。 (方法参数对于为什么这可能是完全无关紧要的)

【讨论】:

  • 是的,它的意思是返回字符串类型,但接受一个 int 参数,然后返回 null。这怎么可能?
  • @emporio 该参数与返回类型完全无关。争论的唯一原因是能够将信息传递到方法中——不管你用它做什么。
  • 是的,所以当 end 返回 null 时,这是合法的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多