【发布时间】:2015-04-28 09:54:13
【问题描述】:
我正在学习'instanceof' java,但我无法清楚地理解'instanceof',我认为下面的答案是真假,但结果都是正确的。你能解释一下为什么会出现这个结果吗?据我所知,当 A 是 B(父母)的孩子,而 B 的实例是“假”但结果与我的想法不同。
class Car{
String color;
int door;
}
class FireEngine extends Car{
void water(){
System.out.println("water");
}
}
public class Operator {
public static void main(String[] args) {
Car car = new FireEngine();
FireEngine fireCar = new FireEngine();
System.out.println(car instanceof FireEngine);
System.out.println(fireCar instanceof Car);
}
}
【问题讨论】:
-
你需要了解变量类型和对象类型的区别。变量
car的类型为Car,但其值为FireEngine类型。想象变量是一个瓶子,一个瓶子可以装液体。啤酒是液体,因此您可以将其放入瓶中。如果您这样做,bottle instanceof Beer将返回 true,即使瓶子没有标记为啤酒瓶。 -
FireEngine 是汽车,FireEngine 是 FireEngine。这是关于实例化的对象,而不是关于如何定义变量。
-
只是我的两分钱:在实际代码中,当使用
instanceof时,95% 的时间是code smell。将它用于学习目的和理解类型和多态性是 100% 没问题的,但是在将来,当您实际编写代码并且必须使用instanceof- 它应该会引发一个危险信号,表明“这里有一些东西是可能设计不佳”。
标签: java