fork(1) download
  1. using static System.Console;
  2.  
  3. public class Program {
  4. public static void Main() {
  5. Veiculo a = new Carro();
  6. a.Andar(); //imprime Carro, mesmo que x seja do tipo Veiculo
  7. Carro b = new Carro();
  8. b.Andar(); //imprime Carro, claro, isso é fácil deduzir
  9. Veiculo c = new Veiculo();
  10. c.Andar(); //imprime Veiculo, é óbvio
  11. Carro2 d = new Carro2();
  12. d.Andar(); //óbvio que imprime Carro
  13. Veiculo e = new Carro2(); //aqui só esconde, não faz polimorfismo, a instância não importa
  14. e.Andar(); //aqui imprime Veiculo, afinal o tipo da variável é dessa classe
  15. Carro3 f = new Carro3();
  16. f.Andar(); //funciona igual, nernhuma confusão
  17. Veiculo g = new Carro3(); //pode estar esperando polimorfismo que não ocorrerá
  18. g.Andar(); //funciona igual, mas poderia não ser o que deseja
  19. Carro4 h = new Carro4();
  20. h.Andar(); //funciona igual, nernhuma confusão
  21. Veiculo2 i = new Carro4(); //pode estar esperando polimorfismo que não ocorrerá
  22. i.Andar(); //funciona igual, mas poderia não ser o que deseja
  23. }
  24. }
  25. public class Veiculo {
  26. public virtual void Andar() => WriteLine("Veiculo");
  27. }
  28. public class Carro : Veiculo {
  29. public override void Andar() => WriteLine("Carro");
  30. }
  31. public class Carro2 : Veiculo {
  32. public new void Andar() => WriteLine("Carro");
  33. }
  34. public class Carro3 : Veiculo {
  35. public void Andar() => WriteLine("Carro"); //note o warning
  36. }
  37. public class Veiculo2 {
  38. public void Andar() => WriteLine("Veiculo");
  39. }
  40. public class Carro4 : Veiculo2 {
  41. public void Andar() => WriteLine("Carro"); //note o warning
  42. }
  43.  
  44. //https://pt.stackoverflow.com/q/151243/101
Success #stdin #stdout 0.02s 15700KB
stdin
Standard input is empty
stdout
Carro
Carro
Veiculo
Carro
Veiculo
Carro
Veiculo
Carro
Veiculo