Método Redefinido?

5 respostas
dfsilva86

Pessoa,

O seguinte código está no capítulo 02 do livro da Kathy onde fala sobre variáveis e métodos statics, reparem no método doStuff()

Segundo o livro o método foi redefinido na classe Dog e não sobrescrito, alguém sabe me dizer porquê?

porque são static? fiquei confuso com isso,

public class Animal {

	static void doStuff(){
		System.out.print("a ");
	}
}

public class Dog extends Animal {

	static void doStuff(){
		// é uma redefinição
		// não uma sobrescrição				  	
	System.out.print("d");
	}
	
	public static void main(String...args){
		Animal [] a = {new Animal(), new Dog(), new Animal()};
		for (int x = 0; x < a.length; x++) {
			a[x].doStuff();
		}
	}
}

5 Respostas

gustavobs

Sim… pense assim… o que um estático pertence à classe e não a qq instancia… então tu nao pode sobreescrever ele… tu simplesmente redefine ele…
esse teu codigo senao me engano irá retornar apenas 3x “a”… já que a referencia é para o tipo Animal.

dfsilva86

Entendi…a saída é isso mesmo 3x “a”

Valeu Gustavo!!!

rmala_ti

Cara, legal sua dúvida.
Entendo que métodos estáticos como disse o amigo, tem a ver com a classe e não com instanciamento de objetos.
Por isso é que o polimorfismo não atua neste caso.
A variável de referência “a” (Animal) chama o método estático(doStuff()) desta classe, por isso imprime “aaa”.
Se estes métodos não fossem estáticos, ai o polimorfismo entraria em ação pois o método da classe Dog seria sobrescrito, e imprimiria “ada”.

Um outro detalhe é que as duas classes não podem ser públicas se estiverem no mesmo arquivo .java.

Espero ter ajudado, abraço.

Milton_Quirino

Eu tive que ler duas vezes essa parte do livro, tambem achei confuso =) , não estava entendendo a diferença entre sobrescrito e redefinido, mas agora ja entendi,

vlw pessoal !

giselezr

estava quase postando no guj quando vi esse tópico…

estou na mesma parte do livro, mas ainda n entendi a diferenca entre sobreescrito e redefinido :shock:
para mim o metodo dostuff() foi sobreescrito, esta tudo igualzinho como se fosse (exceto por ser static)…
se alguem puder me explicar eu agradeço

Criado 5 de fevereiro de 2009
Ultima resposta 20 de out. de 2011
Respostas 5
Participantes 5