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,
publicclassAnimal{staticvoiddoStuff(){System.out.print("a ");}}publicclassDogextendsAnimal{staticvoiddoStuff(){// é uma redefinição// não uma sobrescrição System.out.print("d");}publicstaticvoidmain(String...args){Animal[]a={newAnimal(),newDog(),newAnimal()};for(intx=0;x<a.length;x++){a[x].doStuff();}}}
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