O que é redefinir um método static?

10 respostas
diegohsi

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.

10 Respostas

fabiofalci

Onde vc leu que pode ser redefinido?

C

Boa Noite

Um método marcado como static pode ser sobrescrito sim, desde que ele continue sendo static.

Falou.

rogelgarcia

Caio Vinicius:
Boa Noite

Um método marcado como static pode ser sobrescrito sim, desde que ele continue sendo static.

Falou.

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…

Hebert_Coelho
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");
	}
public class Filho extends Pai {
	
}
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. [=

rogelgarcia

E nisso tudo que vc falou aí… onde está a redefiniçao?

rogelgarcia

Háaaa… lembrei de uma coisa… pra responder isso… quem vai saber, é o cara do static

Hebert_Coelho

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…

ViniGodoy

Você pode fazer sobrecarga de um método estático:

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);
    }
}
Você pode definir um método de nome igual na classe filha, mas você acabará com 2 métodos:
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

E é só o que você pode fazer.

LucasRey

Alem dessa, todas as outras explicações já estão claras para mim.
É isso ae.

diegohsi

Entendi galera, valeu jakeFrog e compahia…
aquele abrass

Criado 15 de julho de 2010
Ultima resposta 17 de jul. de 2010
Respostas 10
Participantes 7