1

次の問題があります。次の 2 つのクラスがあるとします: Bicycle と MountainBike。MountainBike のヘッダーに次のように記載していますpublic class MountainBike extends Bicycle。MountainBike クラスは、Bicycle には存在しない 2 つのフィールドを追加します。属性を 1 つずつ追加するため (データベースで作業しているため)、コンストラクターはありませんが、String 識別子と値を指定して属性を設定する関数があります。すべての属性が設定されていない可能性があり、null になる可能性があることはわかっていますが、これは問題ありません。

さて、質問は以下です。ある時点で、私はそれがどのタイプのバイクであるかを知っています。それはフィールドの 1 つです。私がやりたいことは次のとおりです。この Bicycle オブジェクトが実際に MountainBike であることがわかったらすぐに、それを MountainBike: にキャストしたいと思いますがMountainBike mb = (MountainBike) bicycle、これにより実行時に java.lang.ClassCastException: Bicycle cannot be が発生します。マウンテンバイクにキャスト。

これは可能だと確信しています (自転車全体を引数として持つコンストラクターを使用しなくても)。これどうやってするの?

ありがとうございました!

ヘクター

4

3 に答える 3

2

MountainBike が Bike を拡張したからといって、Bike を MountainBike にキャストすることはできません。次に例を示します。

Bike bike = new MountainBike();
MountainBike mb = (MountainBike) bike; //works

Bike bike = new Bike();
MountainBike mb = (MountainBike) bike; //ClassCastException
于 2013-02-11T18:36:44.540 に答える