抽象的な型にはキャストしないでしょ。
追記:
思い出した。「アップキャスト」だ!javaでは、アップキャストは明示的に指定する必要はない、だ。「抽象的な型にはキャストしない」は表現として良くない。突っ込み記事なのに、恥ずかしい><
本文:
JavaとRuby:主要機能の比較という記事の間違い探しが各所で広がってる様子。
でも、まだ誰も突っ込んでない所があったので、我先に行かせて頂きます。
キャスト
Javaでは、ある条件を満たす場合に、オブジェクトを他のオブジェクトにキャストできます。その条件とは、「キャストしようとするオブジェクトの型が、キャスト先オブジェクトの型の拡張である」というものです。たとえば、LinkedHashSet型のオブジェクトlinkedHashSetはHashSet型にキャストできます。LinkedHashSet型はHashSet型の拡張であるためです。HashSet hashSet=(HashSet)linkedHashSet;
んー、エラーは起きないけど、こんなソース書かれたら困る。文章の説明部分はわかったようなわかんないような感じでよくわかんないけど、多分違う。
普通、継承元のクラスのオブジェクトに代入するときは、明示的にキャストしないですよ。↓で十分。
HashSet hashSet = linkedHashSet;
キャストを使う場面って、↓の例のように、「一般的なクラスとして定義された変数の中身が実はあるクラスのインスタンスで、後々でやっぱりそのインスタンスのクラスとして扱いたい場合」にキャストするわけで、つまり一般的な型を拡張された型として扱う場合に使うわけで、例としてはイササカ不適切ではないかと思うわけです。
HashSet hashSet = new linkedHashSet(); //...色々な処理 LinkedHashSet linkedHashSet = (LinkedHashSet) hashSet;