fork(4) download
  1. class Animal {
  2. public void fazBarulho() {
  3. System.out.println("silêncio");
  4. }
  5. }
  6. class Dog extends Animal {
  7. public void fazBarulho() {
  8. System.out.println("au au");
  9. }
  10. }
  11. class Cat extends Animal {
  12. public void fazBarulho() {
  13. System.out.println("miau");
  14. }
  15. }
  16. class Main {
  17. public static void main(String[] args) {
  18. Dog dog = new Dog();
  19. Animal animal = new Animal();
  20. Animal animal2 = new Dog();
  21. Animal animal3 = new Cat();
  22. dog.fazBarulho();
  23. animal.fazBarulho();
  24. animal2.fazBarulho(); //concretamente é um cachorro
  25. animal3.fazBarulho(); //concretamente é um gato
  26. System.out.println("-- Castings agora --");
  27. ((Animal)dog).fazBarulho(); //upcasting
  28. ((Dog)animal2).fazBarulho(); //downcasting, funciona
  29. ((Dog)animal3).fazBarulho(); //downcasting, dá erro porque um gato não é um cachorro
  30. ((Dog)animal).fazBarulho(); //downcasting, dá erro aqui
  31. }
  32. }
  33.  
  34. //https://pt.stackoverflow.com/q/131091/101
Runtime error #stdin #stdout #stderr 0.06s 32688KB
stdin
Standard input is empty
stdout
au au
silêncio
au au
miau
-- Castings agora --
au au
au au
stderr
Exception in thread "main" java.lang.ClassCastException: class Cat cannot be cast to class Dog (Cat and Dog are in unnamed module of loader 'app')
	at Main.main(Main.java:29)