Mais uma questão de prova

…eai gente, mais uma questãozinha pra vcs, desta vez sobre sobreposição de métodos…, bem, qual será a saída deste código? “animal” ou “cachorro”? Não vale compilar e rodar heim, tem q ser só no olho… :smiley:

public class SobreposicaoDeMetodo {
    
    public void foo( Animal a )
    {
        System.out.println( "animal" );
    }
    
    
    public void foo( Cachorro a )
    {
        System.out.println( "cachorro" );
    }
    
    public static void main( String args[] )
    {
        SobreposicaoDeMetodo s = new SobreposicaoDeMetodo();
        
        Animal animalObj = new Cachorro();
                
        s.foo( animalObj );
    }
    
}

class Animal {}
class Cachorro extends Animal {}

Na minha opnião vai imprimir “cachorro”.

Animal animalObj = new Cachorro();
               
        s.foo( animalObj ); 

Quiz fazer uma pegadinha né… vc instanciou um Cachorro, portanto o método que será chamando é a que tem o parâmetro Cachorro. Não iria chamar o método com o parâmetro Animal, pois o que o método verifica é o tipo que está armazenado no atributo animalObj.

Blz?? Acertei??? :wink:

Vai imprimir animal, pois para passagem de parâmetros é verificado o tipo do tempo de COMPILAÇÃO.
portanto “animal”.

[]s

[quote=“Samuel_Pessorrusso”]Vai imprimir animal, pois para passagem de parâmetros é verificado o tipo do tempo de COMPILAÇÃO.
portanto “animal”.

[]s[/quote]

:oops:
Corretíssimo… é que em tipos primitivos ele analisa o conteúdo, então pensei que seria assim com objeto… mas não é…

[quote=“Samuel_Pessorrusso”]Vai imprimir animal, pois para passagem de parâmetros é verificado o tipo do tempo de COMPILAÇÃO.
portanto “animal”.

[]s[/quote]

…isso ai! :smiley: