Bom tenho uma classe chamada Pessoa, extendem dela PessoaFisica e PessoaJuridica. A questão é que deve haver uma classe PrestadorServico, porem, ela pode ser tanto PessoaFisica quanto PessoaJurica. Java não permite herança multipla, alguem sugere algo?
Bom ja que tem duvidas…
Tipo toda a Pessoa Fisica e Juridica é um Prestador de Serviço?? se não for não pode usar isso como herança, caso contrário, depende de sua necessidade quanto a essa modelagem, pois poderá usar uma Interface ou algo mais abstrato talvez fazer de modo dinamico\abstrato com padrões de criação…
Dê uma olhada nesse artigo, talvez algo te interesse.
Olhe os tópicos de criação.
Não vi se tem alí, mas procure na web também sobre FactoryMethod e AbstractFactoryMethod.
Bom Prestador de Servico hora pode ser PessoaJuridica, e outra PessoaFisica, mas isso não qér dizer q sempre seja os dois entende.
A partde que vc citou sobre Interface, parece interessante, porem pensei e não encontrei uma maneira de enquadrala nessa analise. Como seria isso?
se vc me prometer que ao receber (em algum outro lugar) um prestador de serviço vc não vai tentar arrancar dele coisas como data de nascimento ou cnpj, altere a sua árvore de heranças:
Caso a alternativa do nosso amigo Sombriks não der certo, talvez possa ser usada uma classe que será instanciada dinamicamente ai no meio disso, utilizando uma classe de acesso que será extendida Por prestador de servico ou outra situação que se encaixa para suas “pessoas”.
Tipo:
Pessoa
Classe Dinamica - [Prestador de Servico || Outra atribuição para pessoa]
PessoaFisica | Pessoa Juridica
Mais datalhado:
public class ClasseDinamica extends Pessoa{}
public class PrestadorDeServico extends ClasseDinamica{}
public class OutraAtribuicaoParaPessoa extends ClasseDinamica{}
Public class PessoaFisica extends ClasseDinamica{}
public class PessoaJuridica extends ClasseDinamica{}
Eu tive esse mesmo problema e resolvi da seguinte maneira(nao sei se eh elegante, mas achei melhor q herdar uma classe para cada tipo de Pessoa.):
Criei um atributo em pessoa chamado TipoPessoa, criei uma classe abstrata com mesmo nome da qual herdo TipoFisica e TipoJuridica.
No seu caso a classe PrestadorDeServico seria herdada diretamente de Pessoa e dinamicamente instanciaria um dos dois tipos de pessoa.
O problema aqui é q os tipos sao consideravelmente diferentes e por isso tive q fazer algumas “gambiarras” para torna-las parecidas. Como o nome dos atributos de cada classe TipoPessoa.
[quote=Java Vinicius Machine]Faria da seguinte maneira:
[b]Pessoa superclasse
PessoaFisica subclasse de Pessoa
PessoaJuridica subclasse de Pessoa[/b]
e PrestadorServico:
public class PrestadorServico {
private Pessoa p;
//outros atributos necessários
public PrestadorServico( Pessoa p ) {
this.p = p;
}
public void setPessoa( Pessoa p ) {
this.p = p;
}
}
[/quote]
Java Vinicius Machine, estou com um problema bem parecido. Não entendi bem sua sugestão. Desse jeito, teria que testar dentro da classe PrestadorServico pra saber se variavel p se trata de uma pessoafisica ou juridica, pra depois popular os dados corretamente?