Método Redefinido?

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,

[code]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();
	}
}

}[/code]

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.

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

Valeu Gustavo!!!

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.

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 !

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