何かが私を夢中にしています。これはJavaでClassCastExceptionをなぜ私に与えますが、C++ではうまく動作しますか?
class Animal {
public:
virtual void makeSound(){ cout<<" From Animal";}
};
class Dog : public Animal {
public : void makeSound(){ cout<<" From Dog ";}
void flip() { cout<<"Flipped";}
};
main() {
Animal *a = new Animal();
((Dog*)a)->makeSound(); // returns From animal
}
それはC++で問題なく動作するでしょうが、なぜそれが、Javaで実行時エラーが生成されます。
は、我々はこれらの単純なクラス
public class Animal {
public void makeSound() {
System.out.println("From Animal");
}
}
public class Dog extends Animal {
public void makeSound() {
System.out.println("From Dog");
}
public void flip() {
System.out.println("Flipped");
}
public static void main(String[] args) {
Animal a= new Animal();
((Dog)a).makeSound(); // Gives me an error at runtime.
}
C++のコードを持っていると仮定しますか?あなたのコードの中でいくつかの点であなたは、例えば、子クラスを参照する場合
は(Javaで)
それは "問題なく機能する" ありません。 Cレガシーによる未定義の動作です。 –
犬は動物ですが、動物は必ずしも犬ではありません –
[スーパークラスからサブクラスへの明示的なキャスト]が重複している可能性があります(https://stackoverflow.com/questions/4862960/explicit-casting-from-super-class-to -subclass)を同じサンプルで –