no final da pag 85 do livro SCJP(portugues) da kathy sierra ela fala q metodos estaticos não podem ser sobrecarregados. mas podem ser redefinidos. bem eu fiz esse codigo e ele deu certo. Nesse exemplo tanto o metodo A é subscrito como sobrecarregado. Ou estou errado?
bom n to com livro agora mais acho q ela fala que nao pode ser sobrecarreado por um metodo nao static nao é isso nao? pq ai vc tem um subscrito e um metodo sobrecarregado!! e lembre-se static so pode chamar static!! mais vou olhar a pg… e posto novamente…
F
fernandoinfo
A problema é que o método:
publicstaticvoidA(inti){System.out.println(“B”);}
Não esta sendo sobrecarregado ele é simplesmente um novo metodo criado
na classe B.
A
absolution
A mesma coisa eh para o metodo A() sem argumentos. Se vc fizer o seguinte:
Aa=newA();Ab=newB();a.A();b.A();
sera impresso “A” duas vezes! Isso pq metodos static sao definidos em tempo de compilacao e nao sao sobrescritos!
se o metodo A() nao fosse static a resposta mudaria para:
A
B
ae galera! espero ter ajudado!
O
oalexandrino
Sobre sobrecargas de métodos estaticos prestem atençao!
As AFIRMATIVAS ao redor do exame:
Métodos estáticos NÃO podem ser sobrecarregados!
Quando você tem um método estatico na subclasse que tem a mesma assinatura de um método estatico na classe Super ele NÃO é uma sobrecarga, o que ele faz é OCULTAR o método da super!
Não estou estudando em portugues, assim to enviando várias regras, em Ingles, sobre esse assunto que pega muita gente!
about overriding !
A static method of a subclass hides–but does not override–an accessible superclass method with the same signature;
A compile-time error is generated if a subclass contains a declaration of an instance method that shares the same signature as an accessible static method of the superclass;
A subclass can override a concrete implementation of a method with an abstract method declaration;
The modifiers, synchronized, native and strictfp, specify implementation details that the programmer is free to change in a subclass.
If a superclass method is synchronized, then the overriding method may or not be synchronized;
If a superclass method is native, then the overriding method may or not be native;
If a superclass method is strictfp, then the overriding method may or not be strictfp;
A subclass method may not have weaker access than the overridden superclass method;
A subclass method can provide greater access than a superclass method;
Paulo_Silveira
cuidado: voces estao errando os termos sobrecarregado e sobrescrito
sobrecarrego é overload e sobrescrito é override! voces estao falando o contrario!
metodos estaticos PODEM ser overloaded, mas nao ha sentido em falar de override de metodos estaticos (ja que nao ha uma instancia para poder falar em invocacao virtual de metodo)
mister_m
Ou pondo de outra forma: overriding/sobrescrita tem a ver com polimorfismo e polimorfismo soh existe com instancias.
O
oalexandrino
Paulo Silveira:
cuidado: voces estao errando os termos sobrecarregado e sobrescrito
sobrecarrego é overload e sobrescrito é override! voces estao falando o contrario!
metodos estaticos PODEM ser overloaded, mas nao ha sentido em falar de override de metodos estaticos (ja que nao ha uma instancia para poder falar em invocacao virtual de metodo)
De fato!
Corrigindo
Métodos estáticos NÃO podem ser SOBRESCRITOS!
Quando você tem um método estatico na subclasse que tem a mesma assinatura de um método estatico na classe Super ele NÃO é um OVERRIDEN, o que ele faz é OCULTAR o método da super!
jaboot
Então a resposta para esta questão é “AB” ?
O
oalexandrino
SIM!
Mas se quiser fazer mais testes
Troque o codigo do construtor por esse:
A.A();
B.A(5);
System.out.println("");
A a = new A();
a.A();
B b = new B();
b.A();
System.out.println("");
A ab = new B();
ab.A();
Voce verá, na ultima instanciacao, que o metodo chamado SEMPRE sera o da classe A, diferentemente se os metodos fossem metodos de instancia ao inves de estaticos.