This question already has answers here:
Use of “instanceof” in Java [duplicate]
(4个答案)
3年前关闭。
假设我们有以下定义。
总的来说,我们有这些:
并且
(4个答案)
3年前关闭。
假设我们有以下定义。
interface Vessel{}
interface Toy{}
class Boat implements Vessel{}
class Speedboat extends Boat implements Toy{}
总的来说,我们有这些:
Boat b = new Speedboat();
并且
(b instanceof Toy)
评估为true
?为什么?我的理解是b
的引用类型是Boat
,但是Boat
与Toy
无关,因此应该是false
,但是答案是true
。 最佳答案
Boat
与Toy
无关,您是对的。
但是您不是在这里处理Boat
,而是在SpeedBoat
变量中存储的实际Boat
。那个SpeedBoat
是Toy
的一个实例。
存储new Speedboat()
的类型无关紧要,因为Java在运行时检查实际对象是否是其他对象的实例。
这样你可以写类似
public boolean callSpeedBoatMethodIfPossible(Boat b) {
if (b instanceof SpeedBoat) {
((SpeedBoat)b).driveVerySpeedy();
}
}
关于java - Java Instanceof方法困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34496939/
10-11 03:34