现在刚刚进入一些Java。在 OCA 7 书中看到这个扩展类,只是想知道类 Baz 怎么可能使用 go 方法并期望返回类型 String,但参数采用 int。则返回为 null。
Baz是合法的构造还是会返回编译错误?我的意思是它返回字符串类型,但采用 int 参数,然后返回 null。这怎么可能?
public class Foo {
void go() {}
}
public class Baz extends Foo {
String go(int x) {
return null;
}
}
由于Baz
扩展Foo
它将继承Foo
的go()
方法。
此外,Baz
声明自己的方法称为go(int x)
,返回类型为 String
。这是两种不同的方法,编译器将它们视为两种方法,因为它们具有不同的签名(= 名称 + 参数类型(。如果唯一的区别是返回类型,那么您会收到编译错误。
由于签名不同,编译器始终可以判断要调用哪个方法 - 在这种情况下,取决于在调用go
时是否将int
作为参数传递。
这就是为什么Baz
是一个完全有效的Java类。
编辑:go(int x)
可以返回null
String
因为这是一个类。当需要对类实例的引用时,您始终可以传递/返回null
。(方法参数对于为什么可以做到这一点根本不重要(