这在 Java 中是可能的:
package x;
public class X {
// How can this method be public??
public Y getY() {
return new Y();
}
}
class Y {}
那么,Java 编译器让我将getY()
方法声明为的充分理由是public
什么?困扰我的是:该类Y
是包私有的,但访问器getY()
在其方法签名中声明了它。但是在x
包之外,我只能将方法的结果分配给Object
:
// OK
Object o = new X().getY();
// Not OK:
Y y = new X().getY();
好的。现在我可以尝试编造一个例子,用方法结果协方差来解释这个例子。但更糟糕的是,我也可以这样做:
package x;
public class X {
public Y getY(Y result) {
return result;
}
}
class Y {}
现在我再也不能getY(Y result)
从x
包裹外面打电话了。为什么我可以这样做?为什么编译器让我以我无法调用的方式声明一个方法?