当前位置:  开发笔记 > 编程语言 > 正文

Java Instanceof方法混淆

如何解决《JavaInstanceof方法混淆》经验,为你挑选了1个好方法。

假设我们有以下定义.

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

主要是,我们有这些:

Boat b = new Speedboat();

(b instanceof Toy)评估为true?为什么?我的理解是,引用类型bBoat,但Boat与之无关Toy,所以它应该是,false但答案是true.



1> luk2302..:

Boat没有任何关系Toy,你是对的.

但是你不是在Boat这里处理,而是SpeedBoat存储在Boat变量中的实际值.这SpeedBoat是一个例子Toy.

存储的类型new Speedboat()无关紧要,因为Java在运行时检查是否实际对象是其他的实例.

那样你就可以写出像

public boolean callSpeedBoatMethodIfPossible(Boat b) {
    if (b instanceof SpeedBoat) {
        ((SpeedBoat)b).driveVerySpeedy();
    }
}

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有