Parece Override mas é Overload

public class Teste {

public static void main(String[] args) {

A a = new A();

B b = new B();

C c = new C();

c.print(new A());

c.print(new B());

c.print(new C());

}

}

 
 

class A {

void print(A param){System.out.println(“A.print”);}

}

 
 

class B extends A{

void print(B param){System.out.println(“B.print”);} // Este método sobrecarrega (Overload) o de A.print. Observe que o parâmetro em B.print não é EXATAMENTE igual ao parâmetro em A.print, por isso o método sobrecarrega e não sobrepõe.

}

class C extends B{

static void print(C param){System.out.println(“C.print”);} // Este método NÃO sobrecarrega nem A.print nem B.print pois é estático.

 
 

// Se o parâmetro do método acima fosse do tipo B ou A estariamos ‘tentando’ fazer o Override por um método estático. Isto acarretaria em um erro em tempo de compilação.

/*

Teste.java:20: print(B) in C cannot override print(B) in B

static void print(B param){System.out.println(“C.print”);}

^

overriding method is static

1 error

*/

 
 

}

Output:

A.print

B.print

C.print

 
 

 
 

Anúncios
Esta entrada foi publicada em Java com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

w

Connecting to %s