在下面的代码中,假设方法equals
属于类Rectangle
,我想知道为什么必须将参数object
转换为if
条件已经确定object
是矩形时的矩形。
public boolean equals(Object object)
{
boolean equal;
if (object != null && this.getClass() ==
object.getClass())
{
Rectangle other = (Rectangle) object;
equal = (this.width == other.width) &&
(this.height == other.height);
}
else
{
equal = false;
}
return equal;
}
答案 0 :(得分:3)
编译器不知道此object
有一个名为width
的字段。但是other
是Rectangle
- 因此编译器知道分别会有width
和height
字段。
我建议你不要进行演员表,而是直接使用该对象并查看你得到的错误。
答案 1 :(得分:1)
this.getClass()== object.getClass()不确保该对象是一个矩形吗?
没有。该语句的作用是返回基于该操作的布尔值。 “确保”对象属于某种类型的唯一方法是初始化变量,或者尝试将其转换为该类型。
从编译器的角度考虑这一点。编译器在传递给函数时会看到一个Object对象。没有什么可以告诉编译器对象是一个Rectangle,因为它的类型永远不会改为Rectangle。
这将是一个语法错误,因为当您尝试执行object.width时,编译器会说:“对象没有此字段。”您需要明确告诉编译器该对象是一个Rectangle。然后,它会知道你可以使用object.width。
考虑到编译器在这样的实例中完全没有脑子,不知道你没有明确告诉它的任何东西。