1
私はこの(propably)シンプルなキャスティングの例で扱いにくい問題があります。手伝っていただけませんか?ジレンマをキャストするインターフェイス
public class Example1 {
interface ParentIf{}
interface ChildIf extends ParentIf {}
interface OtherIf {}
class ParentCl {}
class ChildCl extends ParentCl {}
class OtherCl {}
public static void main(String[] args) {
ChildIf cI = null;
ParentIf pI = null;
OtherIf oI = null;
ChildCl cC = null;
ParentCl pC = null;
OtherCl oC = null;
cI = (ChildIf)oI; //case1 - fine
cC = (ChildCl)oC; //case2 - inconvertible types
cI = (ChildIf)oC; //case3 - fine
}
}
しかし、他の2つのステートメントがうまくいかない理由はわかりません。
OtherIfとChildIfの間の接続が見つかりません。では、CaseIの2つのインターフェースの間に "extend"がない場合、ChildIfにOtherIfをキャストする方法はありますか?
私はまだちょっと混乱しています。 「できます」とは、この時点で、ChildIfとOtherIfの両方を実装するクラスのインスタンスではありませんが、IntelliJはそれが可能であることを「知っていますか?申し訳ありません私はそれを見ることができません:/ – vviston
oIは、 'OtherIf'型のオブジェクトを参照する変数です。コンパイラは、実行時にオブジェクトの具体的な型を気にしません。それは、変数の宣言された型を気にします:OtherIf。型がChildIfとOtherIfの両方を実装することは可能ですか?はい、可能です。だからキャストは成功するかもしれないので意味があります。 –