Java Instanceof方法混淆
假设我们有以下定义Java Instanceof方法混淆,java,interface,boolean,instanceof,Java,Interface,Boolean,Instanceof,假设我们有以下定义 interface Vessel{} interface Toy{} class Boat implements Vessel{} class Speedboat extends Boat implements Toy{} 我们主要有以下几点: Boat b = new Speedboat(); 而(玩具的b实例)的计算结果为true?为什么?我的理解是b的参考类型是Boat,但是Boat与Toy无关,因此它应该是false,但根据我的理解,答案是true instanc
interface Vessel{}
interface Toy{}
class Boat implements Vessel{}
class Speedboat extends Boat implements Toy{}
我们主要有以下几点:
Boat b = new Speedboat();
而(玩具的b实例)
的计算结果为true
?为什么?我的理解是b
的参考类型是Boat
,但是Boat
与Toy
无关,因此它应该是false
,但根据我的理解,答案是true
instanceof运算符将对象与指定类型进行比较。您可以使用它来测试对象是类的实例、子类的实例还是实现特定接口的类的实例
因此,它检查对象的类型,但不检查对象引用的类型。根据
instanceof运算符将对象与指定类型进行比较。您可以使用它来测试对象是类的实例、子类的实例还是实现特定接口的类的实例
因此,它会检查对象的类型,但不会检查对象的引用类型。
Boat
与Toy
无关,您是对的
但是您在这里处理的不是船
,而是实际的快艇
,它存储在船
变量中。而快艇
就是玩具
的一个例子
存储new Speedboat()
的类型并不重要,因为Java会在运行时检查实际对象是否是其他对象的实例
这样你就可以写一些
public boolean callSpeedBoatMethodIfPossible(Boat b) {
if (b instanceof SpeedBoat) {
((SpeedBoat)b).driveVerySpeedy();
}
}
船
与玩具
无关,你说得对
但是您在这里处理的不是船
,而是实际的快艇
,它存储在船
变量中。而快艇
就是玩具
的一个例子
存储new Speedboat()
的类型并不重要,因为Java会在运行时检查实际对象是否是其他对象的实例
这样你就可以写一些
public boolean callSpeedBoatMethodIfPossible(Boat b) {
if (b instanceof SpeedBoat) {
((SpeedBoat)b).driveVerySpeedy();
}
}
b
的编译类型是Boat
。但是它的运行时类型是快艇
编译
b
的类型是船
。但是它的运行时类型是快艇
你应该阅读。你应该阅读。