关于类中的方法定义

时间:2015-03-28 00:50:43

标签: java

我对Java中的类定义有疑问。对于以下代码段,在if开关已经验证h is an instance of Animal之后,为什么我们仍然需要添加Animal ob = (Animal) h行?另外,为什么第二个编码段错了?我知道它应该来自public boolean equals (Animal h)

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

Object.equals()接受Object类型的对象,因此第二个示例是错误的,因为它需要一个Animal对象。在第一个中,强制转换是因为变量具有类型Object,即使它实际上是Animal类型的实例,因此需要强制转换为类型为{的变量{1}}。

答案 1 :(得分:0)

1 - 您必须与instanceof核对,因为收到的Object h可能是任何类的实例,因为在Java中,所有类都自动从Object类继承。

例如,它可能是Fruit。如果它是Fruit,则它不是Animal。如果您尝试将其强制转换为Animal,则会抛出ClassCastException

这就是为什么在将收到的Object h转换为Animal之前,首先检查h实际上是Animal类的实例。如果(h instanceof Animal)的评估结果为false,则表示h不是Animal,因此不会执行转换,也不会抛出ClassCastException

演员必须告诉编译器h实际上是Animal类的一个实例(到目前为止所有编译器都知道hObject的一个实例1}} class,因为它是方法参数的类型)。这样,您就可以通过h类的成员访问Animal的数据。

2 - 第二种方法在技术上是正确的,但instanceof检查和强制转换都不是必需的,因为收到的Animal h无法帮助成为Animal。那么,为什么检查哪些是显而易见的如果该方法被执行,那是因为它是使用静态类型已经为Animal的参数调用的。因此,在访问h的字段之前,您需要做的就是检查h是否不是null