假设我们有以下定义.
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(); } }