This question already has answers here:
Use of “instanceof” in Java [duplicate]
                                
                                    (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,但是BoatToy无关,因此应该是false,但是答案是true

最佳答案

BoatToy无关,您是对的。

但是您不是在这里处理Boat,而是在SpeedBoat变量中存储的实际Boat。那个SpeedBoatToy的一个实例。

存储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