Boa noite pessoal, to fazendo um projeto de POO e nao consegui resolver um problema com a minha herança, entao venho aki pedir ajuda a vcs pois nao consegui resolver!!
publicclassSetor{privateStringnome;privateintcod;publicSetor(intcod,Stringnome){this.nome=nome;this.cod=cod;}//gets e sets implementados.publicabstractclassFuncionario{privateStringnome;privateStringcod;privateSetorsetor;publicFuncionario(Stringcod,Stringnome,Setorsetor){this.nome=nome;this.cod=cod;this.setor=setor;}}publicclassEstoquistaextendsFuncionario{publicEstoquista(Stringcod,Stringnome){super(cod,nome,setor);}}publicclassGerenteextendsFuncionario{publicGerente(Stringcod,Stringnome){super(cod,nome,setor);}}
O meu problema eh que quando eu coloco o construtor de Estoquista e Gerente, no super o setor sem vem dando erro. O construtor pede pra eu colocar, o parametro setor do super, como protected e depois q eu faço isso pede pra eu colocar como static tb.
Então venho aqui recorrer a vcs para me ajudar em como eu posso resolver esse problema.
publicclassSetor{privateStringnome;privateintcod;publicSetor(intcod,Stringnome){this.nome=nome;this.cod=cod;}//gets e sets implementados.publicabstractclassFuncionario{privateStringnome;privateStringcod;privateSetorsetor;publicFuncionario(Stringcod,Stringnome,Setorsetor){this.nome=nome;this.cod=cod;this.setor=setor;}}publicclassEstoquistaextendsFuncionario{publicEstoquista(Stringcod,Stringnome){super(cod,nome,setor);//Daonde saiu esse setor? Ele não existe para ser usado como super. DEve ser passado como paramentro no construtor.}}publicclassGerenteextendsFuncionario{publicGerente(Stringcod,Stringnome){super(cod,nome,setor);//IDEM ao de cima}}
Seguindo essa aborgagem o correto seria:
publicclassSetor{privateStringnome;privateintcod;publicSetor(intcod,Stringnome){this.nome=nome;this.cod=cod;}//gets e sets implementados.publicabstractclassFuncionario{privateStringnome;privateStringcod;privateSetorsetor;publicFuncionario(Stringcod,Stringnome,Setorsetor){this.nome=nome;this.cod=cod;this.setor=setor;}}publicclassEstoquistaextendsFuncionario{publicEstoquista(Stringcod,Stringnome,Setorsetor){super(cod,nome,setor);}}publicclassGerenteextendsFuncionario{publicGerente(Stringcod,Stringnome,Setorsetor){super(cod,nome,setor);}}
tá ai seu problema.
Henrique_Fernandes
Pow cara eh isso mesmo… tinha esquecido totalmente de colocar o setor no construtor das classes estendidas…
valeu ai pela dica abraços!!
adriano_si
Lavieri:
Evite herança… use composição e seja feliz…
Não entendi… daria pra resolver todos os problemas de “herança” com composição ?? a Herança nos incorre em algum erro grave que deva ser evitado durante as fases de um projeto ?? desculpe a Noobisse…
PS: é dúvida mesmo, se tiver algum artigo a respeito, gostaria de dar uma lida sobre…
Abraços
EDIT: problema é uma palavra forte…
leandronsp
Lavieri:
Evite herança… use composição e seja feliz…
Concordo com vc Lavieri, que herança traz um alto acoplamento entre as classes…mas neste caso, se pensarmos em objetos, não seria melhor dizer: “Gerente É-UM Funcionário” do que dizer “Gerente TEM-UM Funcionário”?. Qual solução vc implementaria com composição? Algo como Funcionario TEM-UM PerfilFuncionario?