Parent
をChild
にキャストできず、Child
からParent
までしかキャストできないと考えました。少なくとも、もしあなたがそうしたのであれば、子供の機能にアクセスすることは許されません。配列の親から奇妙な動作へのキャスト
それから私は、Javaは私が明示的に子供に親をキャストすることができますことを参照してください。
a=(B)a;
しかし
bArray[0]=a
または
a.testB();
を許可しません。しかし、これはokです。
bArray[1]=(B)a;
ので、このです:
bArray[1].testB();
は誰かがここで何が起こっているか説明していただけます!親クラスにどのように子クラスの関数を与えることができますか?そしてなぜ配列に配置する最初の試みは機能しませんが、2番目の試みは機能しますか?それは同じではありませんか?
class A {
public void testA() {
}
}
class B extends A {
public void testB() {
}
}
public class polymorphicObjects {
public static void main(String[] args) {
B bArray[] = new B[5];
A a = new A();
A ab = new B();
a = (B)a; //didnt think you could do this
bArray[0] = a; //but if I can the why doesnt this work?
a.testB(); //or this
bArray[1] =(B)a; //but this does work
bArray[1].testB(); //and so does this!?
}
}
**なぜこの作品はありませんか?** - あなたは 'a'をタイプAのbeeingとして宣言していますので、それは問題ではありません。 'A a =(B)new A();'変数 'a'は、あなたがそれをどのように定義したかのために、' A'型のままです。とにかく。私は実際には、これは動作しないと確信しているし、それを実行しようとすると、あなたはClassCastExceptionを取得します。コンパイルするだけで動作するということはありません。 –
Haはいクラスキャストの例外です。私はOCJAのために勉強していて、彼らは私に奇妙なものを投げていました。コンパイルするとは思わなかった。ありがとうございます。 – Mason