public static void Main() { Veiculo a = new Carro(); a.Andar(); //imprime Carro, mesmo que x seja do tipo Veiculo Carro b = new Carro(); b.Andar(); //imprime Carro, claro, isso é fácil deduzir Veiculo c = new Veiculo(); c.Andar(); //imprime Veiculo, é óbvio Carro2 d = new Carro2(); d.Andar(); //óbvio que imprime Carro Veiculo e = new Carro2(); //aqui só esconde, não faz polimorfismo, a instância não importa e.Andar(); //aqui imprime Veiculo, afinal o tipo da variável é dessa classe Carro3 f = new Carro3(); f.Andar(); //funciona igual, nernhuma confusão Veiculo g = new Carro3(); //pode estar esperando polimorfismo que não ocorrerá g.Andar(); //funciona igual, mas poderia não ser o que deseja Carro4 h = new Carro4(); h.Andar(); //funciona igual, nernhuma confusão Veiculo2 i = new Carro4(); //pode estar esperando polimorfismo que não ocorrerá i.Andar(); //funciona igual, mas poderia não ser o que deseja }