假设我们有以下定义。
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的类型无关紧要,因为Java在运行时检查实际对象是否是其他对象的实例。
这样你可以写类似
public boolean callSpeedBoatMethodIfPossible(Boat b) {
if (b instanceof SpeedBoat) {
((SpeedBoat)b).driveVerySpeedy();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句