[英]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);
需要注意的主要事情是子类是它的父类的类型。
如果method()
的参数是X
类型,则任何属于X
子类型的对象(在示例中为Y
)也可作为参数有效。
请注意,您还可以执行以下操作:
X yObj = new Y(); // declare variable yObj with type X and reference Y instance
xObj.method(yObj);
以Integer
类为例。 Integer
扩展Number
,而Number
隐式扩展Object
。 任何Integer
类型的对象也是一个Number
和一个Object
。 所以你可以这样做:
static void print(Object obj) {
System.out.println(obj);
}
并调用:
Integer n = 5;
print(n);
输出:
5
方法参数的类型总是与其子类型相匹配。 这意味着匹配 X 的方法将匹配其子类 Y。这是因为,对于编译器来说,Y 保证像 X 一样运行,因为这是 OOP 的基本约定之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.