Ajuda urgente em herança!

5 respostas
Henrique_Fernandes

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!!

public class Setor {

	private String nome;
	private int cod;
	
	public Setor(int cod, String nome) {
		this.nome = nome;
		this.cod = cod;
	}
//gets e sets implementados.

public abstract class Funcionario {

	private String nome;
	private String cod;
	private Setor setor;

	public Funcionario(String cod, String nome, Setor setor) {
		this.nome = nome;
		this.cod = cod;
		this.setor = setor;
	}
}

public class Estoquista extends Funcionario{

	public Estoquista(String cod, String nome) {
		super(cod, nome, setor);
	}
}

public class Gerente extends Funcionario {

	public Gerente(String cod, String nome) {
		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.

Agradeço a ajuda de todos!

5 Respostas

Lavieri

Evite herança… use composição e seja feliz…

Felagund

So repare aqui nos comentarios

public class Setor {

	private String nome;
	private int cod;
	
	public Setor(int cod, String nome) {
		this.nome = nome;
		this.cod = cod;
	}
//gets e sets implementados.

public abstract class Funcionario {

	private String nome;
	private String cod;
	private Setor setor;

	public Funcionario(String cod, String nome, Setor setor) {
		this.nome = nome;
		this.cod = cod;
		this.setor = setor;
	}
}

public class Estoquista extends Funcionario{

	public Estoquista(String cod, String nome) {
		super(cod, nome, setor);//Daonde saiu esse setor? Ele não existe para ser usado como super. DEve ser passado como paramentro no construtor.
	}
}

public class Gerente extends Funcionario {

	public Gerente(String cod, String nome) {
		super(cod, nome, setor);//IDEM ao de cima
	}
}

Seguindo essa aborgagem o correto seria:

public class Setor {

	private String nome;
	private int cod;
	
	public Setor(int cod, String nome) {
		this.nome = nome;
		this.cod = cod;
	}
//gets e sets implementados.

public abstract class Funcionario {

	private String nome;
	private String cod;
	private Setor setor;

	public Funcionario(String cod, String nome, Setor setor) {
		this.nome = nome;
		this.cod = cod;
		this.setor = setor;
	}
}

public class Estoquista extends Funcionario{

	public Estoquista(String cod, String nome, Setor setor) {
		super(cod, nome, setor);
	}
}

public class Gerente extends Funcionario {

	public Gerente(String cod, String nome, Setor setor) {
		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 :wink:

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?

[]´s

Criado 20 de maio de 2009
Ultima resposta 23 de mai. de 2009
Respostas 5
Participantes 5