instanceof演算子は型比較演算子と言います。
言語規定では、15.20.2 型比較演算子 instanceof
で定義されています。
A instanceof B の場合、1.『オブジェクトAは型Bのインスタンスである』だけでなく、
2.『キャストして代入可能』である場合もtrueとなります。
私は1だけかとしばらく思っていたのですが、
参考書を読むと2も書かれていたので言語規定を読んでみると、
もう少し本質的な説明がなされていました。
曰く、
『Aが null でなく、例外 ClassCastException を投げず
に B にキャストできるならば、trueとする。』
だそうです。
はい、ということで、ClassCastExceptionも詳しく調べないといけませんね。
ClassCastException は、API仕様で調べましょう。
曰く、
『あるオブジェクトを継承関係にないクラスに
キャストしようとしたことを示すためにスローされます。』