私はOCAJP JAVAサンプルの質問をいくつか調べていましたが、次の質問に遭遇しました。Java継承とキャスト
次のコードを検討してください。
interface I{ }
class A implements I{ }
class B extends A { }
class C extends B{ }
そして、次の宣言:
A a = new A();
B b = new B();
エラーなしでコンパイルして実行しますか?
A. a = (B)(I)b;
B. b = (B)(I) a;
C. a = (I) b;
D. I i = (C) a;
これは意味があります。私が理解していないのは、B.が正解ではないということです。それは誤った選択だと言いました。なぜなら、aはクラスBのオブジェクトを指していないので実行時に失敗するからです。
私は実際にEclipseに行き、コード全体を書きました。明らかにCはコンパイルされず、Dは実行時に失敗しました。私のコードで少なくとも問題なくコンパイルされています。私はここに何かを逃していますかまたは本は実際に間違っていますか?ここ
public class Test{
public static void main (String[]args){
A a = new A();
B b = new B();
a=(B)(I)b;
b=(B)(I)a;
}
}
interface I{ }
class A implements I{ }
class B extends A { }
class C extends B{ }
あなたは私にそれを打つ。 –