Duvida usando o extends e o static

5 respostas
thiagotbo

Aê Galera…

Tô com uma dúvida na utilização do extends e do static, é o seguinte:

Vou criar uma classe produto que terá os itens básicos de um produto e que irá servir como modelo pra vários tipos de produtos dentro do estoque, vou usar o ‘extends’ para os outros tipos de produtos serem filhos dessa classe, até aí tudo bem(eu axu hehe)…

 dentro desta classe produto tem uma variável que será 'static', mas em um determinado tipo de produto, eu vou precisar dessa mesma variavel, mas ela não pode ser static.

Ela pode ser static  na super e em uma determinada filha eu declarar ela novamente não sendo static ? ? ?

5 Respostas

guilherme.chapiewski

Tem algum problema de design aí.

O que precisa ou não ser estático? Por favor, tente detalhar um pouco mais o problema e suas intenções.

LPJava

bom cara, se vc postar a sintaxe como ta fazendo facilita, bom uma das melhores forma que acho ai, é vc usar metodos para acessar as variaveis ou seja declarar para cada class as variaveis private, pelo visto da usando public e isso nao eh uma boa OO. Mas nesse seu caso ai vc pode ter uma interface para a class que vai ter a implementação diferente das demais. Lembre-se disso variaveis static so pode ser acessada por variaveis static e non-static apenas por non-static mais pq? devido a static pertence a class e non-static eh uma instancia da class. A diferença na pratica mesmo é que o valor da sua variavel static eh compartilhada e da non-static nao é… quando vc instancia um objeto dar o new, elas recebem o valor explicitamente que recebeu ou seu valor padrao se for primitivo recebe seu primitivo se for objeto recebe um null.
Essa teoria eh fundamental!! poe a sintaxe ai…

ViniGodoy

A resposta é não.

Você não pode fazer com que uma determinada variável deixe de ser static. Você pode até criar uma segunda variável, não static e copiar o valor da static no construtor. Mas simplesmente retirar o modificador na filha não dá.

Entretanto, concordo com os colegas… se você está precisando recorrer a esse tipo de artifício, tem alguma coisa errada no seu código.

Mantu

Só pra complementar o que o ViniGodoy disse, você até pode ter na classe pai um campo, por exemplo, static int i, e na classe filha ter int i. Só que isso não vai surtir o efeito “esperado” de tornar o campo da classe pai estático. Na verdade, temos aí dois campos distintos: i da classe pai, e outro i da classe filha. Isto porque em Java não há sobrescrição de campos, apenas de métodos.
Veja o seguinte exemplo:

01 class A{
02   static int i;
03   
04   A(){
05     i = 100;
06   }
07 }
08 
09 class B extends A{
10   int i;
11   
12   B(){
13     i = 200;
14   }
15 }
16 
17 class T{
18   public static void main(String[] args) {
19     A a;
20     
21     a = new A();
22     System.out.println(a.i);
23     System.out.println();
24     
25     a = new B();
26     System.out.println(a.i);
27     System.out.println();
28 
29     B b = new B();
30     System.out.println(b.i);
31   }
32 }

Ao rodar esse programinha, você vai notar que não há sobrescrição do campo i. Cada uma das classes tem o seu próprio campo i. Note como o polimorfismo não se manifesta no trecho entre as linhas 25 a 27.
Como o ViniGodoy falou, o que você poderia fazer seria alterar a linha 13 para

i = A.i;

Mas de fato, isso cheira meio mal…

thiagotbo

É galera…

Eu debuguei o algoritmo aqui e realmente desta forma como eu queria fazer não estava certo, e não ia surtir o efeito que eu quero, mas é só eu fazer a declaração de uma nova variável que encontrei uma maneira de funcionar.

Eu estava com dúvidas na herança, mas a frase (“Isto porque em Java não há sobrescrição de campos, apenas de métodos.”) do Mantu sanou a dúvida que eu estava.

Muito Obrigado a todos… e até a próxima duvida… hehe

Criado 2 de março de 2007
Ultima resposta 2 de mar. de 2007
Respostas 5
Participantes 5