Pessoa,l vi que um método static não pode ser sobrescrito, porém pode ser redefinido. Na verdade não sei o que isso quer dizer; alguém poderia sanar a minha dúvida ?
Desde já
Agradeço.
Pessoa,l vi que um método static não pode ser sobrescrito, porém pode ser redefinido. Na verdade não sei o que isso quer dizer; alguém poderia sanar a minha dúvida ?
Desde já
Agradeço.
Onde vc leu que pode ser redefinido?
Boa Noite
Um método marcado como static pode ser sobrescrito sim, desde que ele continue sendo static.
Falou.
[quote=Caio Vinicius]Boa Noite
Um método marcado como static pode ser sobrescrito sim, desde que ele continue sendo static.
Falou.[/quote]
No caso… eles sao métodos diferentes… para haver sobrescrita tem que haver herança…
Código estático nao é OO… logo nao existe herança em código estático…
Tecnicamente falando
…
O que o autor deve querer dizer… é que vc pode definir um método estático na class X e na classe Y extends X definir o mesmo método estático…
O negócio é o seguinte. Se vc tem um método não estático, vc sobrescreve. Pois ele pode ser herdado, sobrescrito e sobrecarregado (pois passa no teste É-UM). Já no caso de estatico, se vc acessar um método da classe pai, vc vai receber um warning falando que o método pode ser acessado direto. Ou seja, vc acessar, mas não por herança. Vamos aos exemplos.
public static void imprima(){
System.out.println("Pai");
}
[code]public class Filho extends Pai {
}[/code]Ao chamar o código por new Filho().imprima();
Vc verá o seguinte warning: “The static method imprima() from the type Pai should be accessed in a static way”.
O correto seria Pai.imprima();
Esse redefinir é apenas um modo de falar “Ei, sobrescrever é apenas para métodos de instância. Para métodos estáticos, vc apenas redefine.”
Dá para acessar? Dá! Seria OO, não! Pois métodos estáticos sempre pertencerão (conceitualmente falando) em suas classes de origem.
Caso tenha mais dúvidas, no java-ranch tem muita coisa boa. [=
E nisso tudo que vc falou aí… onde está a redefiniçao?
Háaaa… lembrei de uma coisa… pra responder isso… quem vai saber, é o cara do static
Haha, ta ali uai! =P
Método static pertence sempre a classe de origem. Por isso que ao escrever o mesmo método na classe filha, é chamado de redefinir, pois vc está colocando em uma classe filha um método com suas próprias caracteríscas e que por definição de OO, isso não é dado como herança.
Se não ficou claro, deve ser a hora, pois tico e teco tão ficando lento…
Você pode fazer sobrecarga de um método estático:
[code]public class Exemplo {
public static void estatico(int x, int y) {
System.out.printf(“X+Y = %d%n”, (x+y));
}
public static void estatico(int x) {
System.out.printf("X+0 = %d%n", x);
}
}[/code]
Você pode definir um método de nome igual na classe filha, mas você acabará com 2 métodos:
[code]public class Exemplo {
public static void estatico(int x, int y) {
System.out.printf(“X+Y = %d%n”, (x+y));
}
}
public class ExemploFilho extends Exemplo {
public static void estatico(int x, int y) {
System.out.printf(“X-Y = %d%n”, (x-y));
}
}
Exemplo.estatico(10,20); //Imprime X+Y=30
ExemploFilho.estatico(10,20); //Imprime X-Y=-10
[/code]
E é só o que você pode fazer.
Alem dessa, todas as outras explicações já estão claras para mim.
É isso ae.
Entendi galera, valeu jakeFrog e compahia…
aquele abrass