Java 将对象传递给方法

Java Passing objects to a method

假设X和Y是类使得Y扩展X。另外,设method(X xObj)是X的一个方法。为什么下面的代码可以编译?

X xObj = new X();
Y yObj = new Y();
xObj.method(yObj);

此外,还有其他类似的情况,其中似乎不正确的代码可以编译吗?

如果 Y 扩展 X,那么,Y 一个 X。您可以在任何应用程序中(始终)用 X 代替 Y

你可以做所有这些花哨的事情:

X object = new Y();
object.method(object)
Y objY = new Y();
object.method(objY);
objY.method(object);

要注意的主要事情是 子 class 是其父 的类型。

如果 method() 的参数是 X 类型,任何属于 X 子类型的对象(在示例中为 Y)也是有效的参数。

请注意,您还可以这样做:

X yObj = new Y(); // declare variable yObj with type X and reference Y instance
xObj.method(yObj);

Integer class 为例。 Integer 扩展了 Number,而 Number 隐式扩展了 ObjectInteger 类型的任何对象也是 NumberObject。所以你可以这样做:

static void print(Object obj) {
    System.out.println(obj);
}

并调用:

Integer n = 5;
print(n);

输出:

5

方法参数的类型始终与其子类型匹配。这意味着匹配 X 的方法将匹配其子类 Y。这是因为,对于编译器而言,Y 保证像 X 一样工作,因为这是 OOP 的基本契约之一。