sev*_*ang 1 java boolean interface instanceof
假设我们有以下定义.
interface Vessel{}
interface Toy{}
class Boat implements Vessel{}
class Speedboat extends Boat implements Toy{}
Run Code Online (Sandbox Code Playgroud)
主要是,我们有这些:
Boat b = new Speedboat();
Run Code Online (Sandbox Code Playgroud)
并(b instanceof Toy)评估为true?为什么?我的理解是,引用类型b是Boat,但Boat与之无关Toy,所以它应该是,false但答案是true.
Boat没有任何关系Toy,你是对的.
但是你不是在Boat这里处理,而是SpeedBoat存储在Boat变量中的实际值.这SpeedBoat是一个例子Toy.
存储的类型new Speedboat()无关紧要,因为Java在运行时检查是否实际对象是其他的实例.
那样你就可以写出像
public boolean callSpeedBoatMethodIfPossible(Boat b) {
if (b instanceof SpeedBoat) {
((SpeedBoat)b).driveVerySpeedy();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |