Java Instanceof方法混乱

sevenxuguang

假设我们有以下定义。

interface Vessel{}
interface Toy{}
class Boat implements Vessel{}
class Speedboat extends Boat implements Toy{}

总的来说,我们有这些:

Boat b = new Speedboat();

(b instanceof Toy)估计为true为什么?我的理解是的引用类型bBoat,但BoatToy无关,因此应该是,false但答案是true

luk2302

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章