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

3 respostas
LecaDF
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?

}
}

3 Respostas

R

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? 
} 
}
LecaDF

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.

J2Alex

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í…

Criado 25 de abril de 2003
Ultima resposta 25 de abr. de 2003
Respostas 3
Participantes 3