Herança+interface = Metodo get com compotamento estranho!

6 respostas
warcanjow

Olá pessoal,

é a primeira vez que apareço por aqui e como todo novato no mundo Java tenho uma dúvida boba, mas que tá me atrapalhando. É o seguinte tenho as Classes Cliente, Fornecedor e Fabricante que herdam tudo o que tem na Classe Pessoa. Preciso criar para essas classes a diferenciação entre pessoa física e pessoa jurídica. Para isso criei duas interfaces, a primera foi IPessoaJuridica e a outra IPessoaFisica.

Os códigos dessas interfaces ficaram assim:

public interface IPessoaJuridica {
	
	public String getRazaoSocial();
	
	public void setRazaoSocial (String novaRazaoSocial);
	
	public int getCnpj ();
	
	public void setCnpj (int novoCnpj);
	
}
public interface IPessoaFisica {

	
	public String getNome (); 
	
	public void setNome (String novoNome); 
	
	public int getCpf (); 
	
	public void setCpf (int novoCpf); 
	
}

A intenção é que a Classe Cliente possa utilizar-se das duas interfaces, podendo os objetos dessa classe serem tanto pessoas físicas(com nome e cpf), quanto pessoas juridicas(com razao social e cpj). Essa classe está assim neste momento(falta terminar o código!):

public class Cliente extends Pessoa implements IPessoaFisica , IPessoaJuridica
{
	
	private int cpf;
	private String nome;

	
	public Cliente(String bairro,String cidade, String situacao, int telefone, String endereco,int codigo, String estado, String email, int numero, int cpf, String nome) 
	{
		super(bairro, cidade, situacao, numero,telefone, endereco,codigo, estado ,email);
		this.cpf = cpf;
		this.nome = nome;
	}

	public String getNome () 
	{
		return nome;
	}

	public void setNome (String novoNome) 
	{
		
	}

	public int getCpf () 
	{
		return cpf;
	}

	public void setCpf (int novoCpf) 
	{
		
	}

	public String getRazaoSocial ()
	{
		return razaoSocial;
	}
	
	public void setRazaoSocial (String novaRazaoSocial) 
	{
		
	}

	public int getCnpj ()
	{
		return cnpj;
	}
	
	public void setCnpj (int novoCnpj) 
	{
		
	}

}

O eclipse tem mostrado nas linhas do return razaoSocial e return Cnpj a mensagem: razaoSocial cannot be resolved e cnpj cannot be resolved respectivamente. Por que isto esta acontecendo? Como posso resolver este problema?

Desde já agradeço!

6 Respostas

N

Eu acho que faltou vc criar os atributos de razaoSocial e cnpj,
vc ta tentando retornar um atributo que não existe

tente assim:

private int cpf;
private String nome;
private String razaoSocial;
private int cnpj;     //ou String cnpj se preferir...
warcanjow
nipo_style:
Eu acho que faltou vc criar os atributos de razaoSocial e cnpj, vc ta tentando retornar um atributo que não existe tente assim:
private int cpf;
private String nome;
private String razaoSocial;
private int cnpj;     //ou String cnpj se preferir...

Mas esses atributos já existem na classe Fornecedor e Fabricante, declarando essas variáveis de instância eu não estaria criando duplicidade de código?

class Fabricante extends Pessoa implements IPessoaJuridica {
	private String razaoSocial;
	private int cnpj;

	public Fabricante(String bairro,String cidade, String situacao, int telefone, String endereco,int codigo, String estado, String email, int numero, String razaoSocial, int cnpj) 
	{
		super(bairro, cidade, situacao, numero,telefone, endereco,codigo, estado ,email);
		this.razaoSocial = razaoSocial;
		this.cnpj = cnpj;
	}

	public String getRazaoSocial () 
	{
		return razaoSocial;
	}

	public void setRazaoSocial (String novaRazaoSocial) 
	{
		
	}

	public int getCnpj () 
	{
		return cnpj;
	}

	public void setCnpj (int novoCnpj) 
	{
		
	}

}

Abraço!

PadrE

war,

Dá uma olçhada melhor no seu código, as variáveis razaoSocial e Cnpj não foram declaradas mesmo.

E estou com o digo na dica dele… =]

Fui !

N

mas ela não foi decladarada em cliente, pelo que entendi cliente, fornecedor e fabricante herdam de Pessoa.
Se vc quer que cliente, fornecedor, fabricante e todos que herdarem de Pessoa, tenham os atributos: cpf, cnpj, nome e razao social, vc deve declarar esses atributos na propria classe Pessoa!

public class Pessoa {
	
	private String nome;
	private String razaoSocial;
	private int cpf;
	private int cnpj;

Eu não entendi muito bem as funções do seu programa, mas o erro que deu eh por causa das variaveis, olha direitinho a sua herança, se ela faz mesmo sentido, o erro pode estar ai...

talvez não seja o caso, mas veja se esta herança faria mais sentido:
public abstract class Pessoa {
	
	//Atributos...
	
	//Get/set..
}

public abstract class PessoaFisica extends Pessoa {
	
	String nome;
	int cpf;
	
	// GET/SET...
	
}

public abstract class PessoaJuridica extends Pessoa {
	
	String razaoSocial;
	int cnpj;
	
	// GET/SET...
}

public class Cliente extends PessoaFisica {
	
	//construtores, metodos, etc...
	
}

public class Fornecedor extends PessoaJuridica {
	
	//construtores, metodos, etc...
	
}

public class Fabricante extends PessoaJuridica {
	
	//construtores, metodos, etc...
	
}

abraço

Andre_Brito

Colocar CNPJ e razaoSocial na Interface de Pessoa Jurídica e CPF na Interface de Pessoa Física não resolveria?
Ou melhor, não seria o mais correto?

warcanjow

dedejava:
Colocar CNPJ e razaoSocial na Interface de Pessoa Jurídica e CPF na Interface de Pessoa Física não resolveria?
Ou melhor, não seria o mais correto?

dedejava, também pensei na possibilidade, mas segundo este tutorial http://www.guj.com.br/java.tutorial.artigo.123.1.guj, as interfaces não podem conter variáveis de instância, as interfaces podem conter apenas constantes definidas(static final). Infelizmente, neste caso preciso de uma variável, afinal durante a utilização de um objeto da classe Cliente posso necessitar mudar o cpf, por exemplo.

Grato!
Abraço!

Criado 1 de maio de 2008
Ultima resposta 1 de mai. de 2008
Respostas 6
Participantes 4