2016-12-23 11 views
5

私は、このようにダウンキャストしてみてください:(Javaダウンキャスティング)この例で私は何が間違っていましたか?

public static void main(String[] args){ 
    Animal a = new Animal(); 
    ((Cat)a).makePee(); 
} 

CatAnimalを拡張し、両方が同じ方法makePee()を持っています。スレッド内

例外「メイン」とjava.lang.ClassCastException:私はこれを実行しようと は、コンパイラは私にエラーメッセージが表示さ動物はMain.main(Main.javaで猫 にキャストすることはできません。 6)

しかし、App Lernの例では、Javaは実際に私と同じように表示されます。

+2

これは非常によく書かれた質問ですが、「App Lern Javaの例は実際に私と同じです」と単純には真実ではありません。 – Bathsheba

答えて

6

まあ、aCatのインスタンスではありません。あなたはCatにそれをダウンキャストしたい場合は、(もちろん、またはCatを拡張するいくつかのクラスのインスタンス)、実際にCatを作成する必要があります。

Animal a = new Cat(); 

注意、しかし、Animalが宣言している場合ということmakePee()Catダウンキャスティングは無意味です。 a.makePee()を呼び出すことができ、Catの実装が使用されます(上記のように実際にCatを作成した場合)。

関連する問題