为什么要投射一个已被识别为特定类的对象?

时间:2016-05-18 15:01:32

标签: java

在下面的代码中,假设方法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;
}

2 个答案:

答案 0 :(得分:3)

编译器不知道此object有一个名为width的字段。但是other Rectangle - 因此编译器知道分别会有widthheight字段。

我建议你不要进行演员表,而是直接使用该对象并查看你得到的错误。

答案 1 :(得分:1)

this.getClass()== object.getClass()不确保该对象是一个矩形吗?

没有。该语句的作用是返回基于该操作的布尔值。 “确保”对象属于某种类型的唯一方法是初始化变量,或者尝试将其转换为该类型。

从编译器的角度考虑这一点。编译器在传递给函数时会看到一个Object对象。没有什么可以告诉编译器对象是一个Rectangle,因为它的类型永远不会改为Rectangle。

这将是一个语法错误,因为当您尝试执行object.width时,编译器会说:“对象没有此字段。”您需要明确告诉编译器该对象是一个Rectangle。然后,它会知道你可以使用object.width。

考虑到编译器在这样的实例中完全没有脑子,不知道你没有明确告诉它的任何东西。