Redefining VS overriding

Pessoal, no SCJP 6 na parte que explica sobre static, está dizendo que métodos estáticos não podem ser sobrescritos mas podem ser redefinidos. Mas olhando o código não consegui notar qual seria a diferença entre um e outro. Procurei algumas coisas na net mas continuo não entendendo.

class Animal {
static void doStuff() {
System.out.print("a ");
}
}
class Dog extends Animal {
static void doStuff() { // it's a redefinition,
                                // not an override
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(); // invoke the static method
}
}

Overloaded e overridden eu entendi na boa. Mas esses dois conceitos ai em cima parecem ser a mesma coisa…

Um método estático pertence a classe, mas não ao objeto, assim, não pode ser herdado.
Para que um método possa ser sobrescrito ele deve ser herdado e Metodos estáticos não são herdados, assim não podem ser sobrescritos.

Faça um teste. Crie 1 método não estatico em Animal e depois sobrescreva em Dog. Dai então, faça polimorfismo Animal animal = new Dog(); vc verá que tem acesso acesso a esse método criado em Dog, mas nos métodos estáticos só consegue ver o método de Animal, pq a variável de instância é de Animal.
Em métodos ou variáveis estáticas, quando fizer polimorfismo, vc tem acesso apenas aos da variável de instância não ao dos objetos.

O java permite acessar através de uma instância métodos estáticos, mas não é considerada boa prática, vc deve sempre chama-los direto (Animal.doStuff();).
Mesmo na instância, o método estático não faz parte da instância, e sim da classe, por isso vc não tem esse método fazendo parte do objeto e sim da variável de referencia da classe que ele foi criado.

Achei esse post que era sobre isso também, da uma olhada, pode ter mais alguma coisa para esclarecer sua duvida.

A parte da referência pela variável de instância e pelo objeto eu tinha compreendido, que no caso de métodos sobrescritos a tempo de execução são chamados os métodos dos objetos, e se não forem sobrescritos são chamados os métodos da variável de referência, e qualquer tentativa de chamar métodos do objeto será inválida.
Acho que se alguém tiver dúvida eu entendo que no caso de dois objetos - um do tipo superclasse e outro um subtipo da superclasse é possível chamar apenas os métodos comuns aos dois uma vez que a subclasse herdou os métodos da superclasse. Mas os métodos chamados são da superclasse a não ser que eles tenham sido sobrescritos pela subclasse, então a tempo de execução os métodos do objeto (sobrescritos ) é que serão chamados…
Mas o que não ficou claro foi a questão do redefining mas acho que com o tópico que Romárcio me indicou deu pra esclarecer.
Mas naquele tópico o que entendi por redefinição é que é praticamente uma sobrecarga de método, uma vez que ao meu ver não é que foi sobrescrito o método mas foi feito um outro método com o mesmo nome, mesmo retorno e parâmetros mas comportamento diferente.
Será que é isso ???

Tem que observar bem isso: Para que um método possa ser sobrescrito ele deve ser herdado e Metodos estáticos não são herdados, assim não podem ser sobrescritos.

Como os métodos não são herdados, vc pode criar um método com mesmo nome na subclasse, por isso é chamado de redefinição. Mas na verdade não tem nada haver com o método da superclasse.

Seria tipo o um método privado na superclasse, ele não é herdado pela subclasse, então vc pode criar na subclasse um método com o mesmo nome do método da superclasse que não terá nada haver com o método da superclasse.
Não que um método privado tenha relação com método estático, mas usei o exemplo para vc ver a visibilidade deles na herança.

Achei outro post que fala sobre o assunto, tem boas explicações nele: http://www.guj.com.br/java/64524-metodos-static

Pois é…o pessoal podia explicar melhor no livro mesmo, mas sei lá…talvez outros se confundam. Só dizem que redefinir e sobrescrever não são a mesma coisa, mas não explicaram.

Obrigado pelas explicações.

[quote=Christian_BHZ]Pois é…o pessoal podia explicar melhor no livro mesmo, mas sei lá…talvez outros se confundam. Só dizem que redefinir e sobrescrever não são a mesma coisa, mas não explicaram.

Obrigado pelas explicações.[/quote]

Realmente, eu li esse livro também, e não é bem explicado mesmo.