Java将对象传递给方法

时间:2015-04-24 04:20:58

标签: java polymorphism

假设X和Y是类,Y延伸X.另外,让方法(X xObj)成为X的方法。为什么以下代码编译?

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

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

3 个答案:

答案 0 :(得分:1)

如果Y延伸X,则Y X。您可以在任何应用程序中将X替换为Y(相继)。

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

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

需要注意的主要事项是子类是它的父类的类型。

答案 1 :(得分:0)

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

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

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

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

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

并致电:

Integer n = 5;
print(n);

输出:

5

答案 2 :(得分:0)

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