Sobrescrita de métodos e atribuição de objetos

class Teste
{
static void show()
{
System.out.println(“Show da Classe Teste”);
}
};

public class Teste1 extends Teste
{
static void show()
{
System.out.println(“Show da Classe Teste1”);
}
public static void main(String[] args)
{
Teste t = new Teste();
t.show();

Teste1 t1 = new Teste1();
t1.show();
t = t1; // <---- t não irá receber todas as propriedades de t1? 
t.show();  // por que não apresenta a mensagem do método da Classe Teste1?

}
}

O método não pode ser static !!!
tente rodar o seguite codigo abaixo !!!

Renato

class Teste
{
void show()
{
System.out.println(“Show da Classe Teste”);
}
};

public class Teste1 extends Teste 

{
void show()
{
System.out.println(“Show da Classe Teste1”);
}
public static void main(String[] args)
{
Teste t = new Teste();
t.show();

		Teste1 t1 = new Teste1(); 
			t1.show(); 
			t = t1; // <---- t não irá receber todas as propriedades de t1? 
				t.show(); // por que não apresenta a mensagem do método da Classe Teste1? 
} 
}

t = t1
mas por que na linha na qual eu passa ao objeto da classe Teste que é t o objeto da classe Teste1 ele não executa o método mesmo estático na qual faz referência o objeto t1.

Obrigado.

Quando os métodos são estáticos, eles são referenciados durante a compilação. Assim sendo, se o tipo de t é Teste, a chamada de métodos estáticos será definida durante a compilação - ou seja, não importa se vc instancia a classe Teste1, os métodos estáticos chamados serão sempre de Teste, que é o tipo do objeto t. Por isso estes métodos são estáticos.

Para os outros métodos aplica-se “late binding” ( ligação tardia ), onde se definirá qual método chamar na hora da execussão.

Uma boa estudada em OOP pode ajudar a esclarecer esse tipo de dúvida, que não é inerente à linguagem Java, mas um conceito OOP.

:roll: Não sei se fui claro, mas é isso aí…