Ajuda no uso de static plz!

5 respostas
Henrique_Fernandes

Boa Tarde pessoal, estou com uma duvida e nao sei como resolver. Tenho tres classes onde uma eh abstrata e duas estendem dela. Eu estou fazendo o atributo codigo (cod) autoincrementar a cada crriaçao de uma instancia, mas so que eu gostaria q esses codigos fossem gerados para cada classe estendida e nesse momento todas as classes estao compartilhando esse autoincremento de codigo (oq eu nao quero).

public abstract class Pessoa {	
	protected int cod;
	private static int incementoCod = 0;

	public Pessoa() {
		this.cod = ++incementoCod;  }
	public int getCod() {
		return cod;  }
}

public class PessoaFisica extends Pessoa {
	public PessoaFisica() {
		super();	}
}

public class PessoaJuridica extends Pessoa {
	public PessoaJuridica() {
		super();	}
}


public class TesteAtributo {
	public static void main(String[] args) {
		PessoaFisica pf1 = new PessoaFisica();
		PessoaFisica pf2 = new PessoaFisica();
		PessoaJuridica pj1 = new PessoaJuridica();
		PessoaJuridica pj2 = new PessoaJuridica();
		PessoaFisica pf3 = new PessoaFisica();
		
		System.out.println(pf1.getCod());
		System.out.println(pf2.getCod());
		System.out.println(pj1.getCod());
		System.out.println(pj2.getCod());
		System.out.println(pf3.getCod());
       }
}

O restultado eh: 1, 2, 3, 4, 5, todas as instancias estao compartilhando o mesmo atributo… e nesse caso gostaria, por exemplo, que como meu resultado com o codigo do main, a resposta fosse pessoaFisica: 1, 2, 3 e pessoaJuridica 1, 2, ou seja um atributo autoincrementado para cada TIPO de instancia criada.

Espero ter sido claro e agradeço a todos!!!

5 Respostas

mario.fts

é porco, mas funciona:

public abstract class Pessoa {	
	protected int cod;
	private static int incementoCodF = 0;
	private static int incementoCodJ = 0;
	
	protected enum Tipo {FISICA, JURIDICA};

	public Pessoa(Tipo tipo) {
		if (tipo.equals(Tipo.FISICA))
			this.cod = ++incementoCodF;
		else
			this.cod = ++incementoCodJ;
		}
	public int getCod() {
		return cod;  }
}

public class PessoaFisica extends Pessoa {
	public PessoaFisica() {
		super(Tipo.FISICA);	}
}

public class PessoaJuridica extends Pessoa {
	public PessoaJuridica() {
		super(Tipo.JURIDICA);	}
}


public class Teste {
	public static void main(String[] args) {
		PessoaFisica pf1 = new PessoaFisica();
		PessoaFisica pf2 = new PessoaFisica();
		PessoaJuridica pj1 = new PessoaJuridica();
		PessoaJuridica pj2 = new PessoaJuridica();
		PessoaFisica pf3 = new PessoaFisica();
		
		System.out.println(pf1.getCod());
		System.out.println(pf2.getCod());
		System.out.println(pj1.getCod());
		System.out.println(pj2.getCod());
		System.out.println(pf3.getCod());
       }
}

saída
1
2
1
2
3

phpinheiro

Eu colocaria uma variavel de incremento para cada tipo de pessoa.

Se os incrementos são distintos, acho melhor cada tipo de pessoa ter o seu.

mario.fts

phpinheiro:
Eu colocaria uma variavel de incremento para cada tipo de pessoa.

Se os incrementos são distintos, acho melhor cada tipo de pessoa ter o seu.

Eu pensei nessa solução tbm. mas código sem o POG não teria graça. :lol:

leandronsp

Tira a variavel incremento da classe abstrata e cria uma variavel incremento para cada classe filha:

public abstract class Pessoa { 
	
    protected int cod;     
    
    public int getCod() {   
        return cod;  
    }   
}
public class PessoaFisica extends Pessoa {   
	private static int incrementoCod = 0;   
	public PessoaFisica() {   
		incrementoCod = incrementoCod + 1;
		this.cod = incrementoCod;
	}   
}
public class PessoaJuridica extends Pessoa {   
	private static int incrementoCod = 0;   
	public PessoaJuridica() {   
		incrementoCod = incrementoCod + 1;
		this.cod = incrementoCod;
	}   
}

[]´s

Henrique_Fernandes

valeu galera… sempre contando c vcs!!!

Criado 2 de abril de 2009
Ultima resposta 2 de abr. de 2009
Respostas 5
Participantes 4