Something is driving me crazy.
Assume we have these simple classes
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++ code:
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
}
Why would it generate runtime error in Java, while it would work without a problem in C++ ?
Thank you