Tenho um livro que infelizmente não é o da Kathy que cita como uma das regras de sobrescrita que um método static pode ser sobrescrito se for herdado pela subclasse. Poderiam por favor me dar uma ajuda neste caso? Obrigado desde já.
Você não pode sobrescrever um método static, pode redefini-lo . Metodo static não se aplica no polimorfismo.
Olhe
publicclassClasse1{publicstaticvoidprint(){System.out.println("print da Classe1");}}
publicclassClasse2extendsClasse1{publicstaticvoidprint(){System.out.println("print da Classe2");}publicstaticvoidmain(String[]args){Classe1cl1=newClasse1();Classe2cl2=newClasse2();// na verdade o q se ve abaixo é um 'atalho'cl1.print();cl2.print();// equivale a issoClasse1.print();Classe2.print();}}
saída será:
print da Classe1
print da Classe2
print da Classe1
print da Classe2
S
sidney.tavares
asousaj
Obrigado pela dica, era bem isso que eu tinha entendido, mas sabe como é, quando a gente está estudando e um livro diz certas coisas a gente acaba acreditando, ou no meu caso, duvidando, acho que é sinal que tô prestando atenção no que leio, valeu mesmo. Abraço.
W
WRYEL
Complementando:
Em java você não pode sobrescrever metodos estáticos, pois não são metodos do objeto, e sim da classe. O que acontece ai, é que o método fica escondido, mas não sobreescrito. Um exemplo disso é se você fizer:
Classe1c1=newClasse2();c1.print();
a saída será “print da Classe1”
[]'s
S
sidney.tavares
WRYEL
Valeu por mais essa dica, quero fazer a prova em fevereiro e todas as dicas pra ajudar são bem vindas, valeu mesmo.
G
Gelleo
Isso mesmo, pra ajudar a entender:
publicstaticvoidmain(String[]args){Classe1cl1=newClasse1();Classe2cl2=newClasse2();// na verdade o q se ve abaixo é um 'atalho' cl1.print();//Classe: Classe1. Objeto: Classe1cl2.print();//Classe: Classe2. Objeto: Classe2cl1=cl2;cl1.print();//Classe: Classe1. Objeto: Classe2}
A saída sera essa:
print da Classe1
print da Classe2 (o mesmo objeto com prints diferentes.)
print da Classe1 (o mesmo objeto com prints diferentes.)