Duvida com Construtores

8 respostas
M

Olá Galera, andei sumido pq na faculdade tenho mais 5 disciplinas alem de java, estou de volta e com uma duvida… Comecei a ver a parte de construtores. Recebi a seguinte questao.

Escreva um outro construtor para a classe ChefedeDepartamento, que em vez de receber e repassar os dados separados de um funcionario(nome, identidade, admissao e nascimento), receba uma instancia da classe funcionario já construida.

O teacher manda usar como exemplo o contrutor dessa classe:

class DataHora extends Data{
	private Data estaData;
	private Hora estaHora;
	
	DataHora(byte hora, byte minuto, byte segundo, byte dia, byte mes, short ano){
	    estaData=new Data(dia,mes,ano);
	    estaHora=new Hora(hora,minuto,segundo);
	}
	
	DataHora(byte dia, byte mes, short ano){
	    estaData=new Data(dia,mes,ano);
	    estaHora=new Hora((byte)0,(byte)0,(byte)0);
	}
	public String toString(){
	    return estaData + " " + estaHora;
	}

	}

eu ja fiz as seguintes classes.

class Pessoa{
    public String nome;
    private int identidade;
    private Data nascimento;
    
    Pessoa(String n, int i, Data d){
        nome=n; identidade=i; nascimento=d;
    }
    public String toString(){
        return "Nome:"+ nome + "\n Identidade:" + identidade + "\n Data de Nascimento:" + nascimento;
    }
}
class Funcionario extends Pessoa{
    private Data admissao;
    private float salario;
    
    Funcionario(String nome, int id, Data nasc, Data adm, float sal){
        super(nome,id,nasc);
        admissao=adm;
        salario=sal;
    }
    public String toString(){
        String resultado;
        resultado= super.toString()+ "\n";
        resultado= resultado + "Data de Admissao:"  + admissao + "\n";
        resultado= resultado + "Salario:" + salario;
        return resultado;
    }
    final public float qualSalario(){
        return salario;
    }
}
class ChefedeDepartamento extends Funcionario{
	private String departamento;
	private Data promocaoAChefe;
	ChefedeDepartamento(String nome, int id, Data nasc, Data adm, float sal, String dep, Data prom){
	    super(nome, id, nasc, adm, sal);
	    departamento=dep;
	    promocaoAChefe=prom;
	}
	public String toString(){
	    String resultado;
	    resultado= super.toString()+"\n";
	    resultado= resultado + "Departamento:" + departamento + "\n";
	    resultado= resultado + " Data de Promoçao:" + promocaoAChefe;
	    return resultado;
	}
	public String qualDepartamento(){
	    return departamento;
	}

	
}

Alguem pode dá uma dica de como faço essa instancia que ele pede?

MigMax.

8 Respostas

C

Em vez de vc usar

ChefedeDepartamento(String nome, int id, Data nasc, Data adm, float sal, String dep, Data prom){

vc usa

ChefedeDepartamento(Funcionario funcionario, String dep, Data prom)

{

super(funcionario);

// resto do codigo aqui

{

Só q pra isso vc deve ter um outro construtor na classe funcionario:

Funcionario(Funcionario f)

{

super.(f.getNome(),f.getId(),f.getNasc());

admissao=f.getAdm();

salario=f.getSal();

}

Onde nesse caso eu to supondo que vc tem métodos get para retornar seus campos.

Além disso, pra facilitar, vc pode fazer fazer um outro construtor na classe pessoa:

Pessoa(Pessoa p)

{

nome = p.getNome();

// etc e tal

}

Se vc tiver esse construtor, vc pode fazer o seguinte no construtor de Funcionario:

Funcionario(Funcionario f)

{

super.(f);   // Funcionario é uma Pessoa, por isso funciona

admissao=f.getAdm();

salario=f.getSal();

}
M

Carisio,

Sua dica até que é muito interessante, mas confesso que enrolei todo. Eu tentei fazer tudo o que disse, mas sempre dá uma erro numa classe ou em outra… nao tem jeito de fazer isso isso mexendo só na classe ChefedeDepartamento?

C

MigMax,

desculpe, respondi com pressa e acabei enrolando na explicação.

É o seguinte, vc já tem um construtor do tipo:
ChefedeDepartamento(String nome, int id, Data nasc, Data adm, float sal, String dep, Data prom)

Em vez de usar ele, pegando todos os dados separados, vc quer criar um novo construtor que já pega um funcionário pronto, certo? Então deve ser algo do tipo:
ChefedeDepartamento(Funcionario funcionario, String dep, Data prom)

Pra construtir, vc tá usando dentro do seu construtor o seguinte:

ChefedeDepartamento(String nome, int id, Data nasc, Data adm, float sal, String dep, Data prom)

{

super(nome, id, nasc, adm, sal);

departamento=dep;

promocaoAChefe=prom;

}

Só que agora vc não tem mais esses caras (nome, id, nasc, adm e sal), o q vc tem é um funcionário, então o seu construtor vai ser:

ChefedeDepartamento(Funcionario funcionario, String dep, Data prom)

{

super(funcionario.getNome(), funcionario.getId(), funcionario.getNasc(), funcionario.getAdm(), funcionario.getSal());

departamento=dep;

promocaoAChefe=prom;

}

Blz, isso já resolve o problema. Observe q nesse caso eu to supondo q vc tem métodos get para obter uma cópia do nome, id, nasc etc. Até aqui tudo bem?

Então, isso já resolve o seu problema. Agora a explicação do que eu tinha tentado te dizer…

O que eu quis dizer na postagem anterior foi o seguinte: Em vez do seu novo construtor fazer super(funcionario.getNome(), funcionario.getXXX() etc), pq não passar um funcionario direto para o construtor de Funcionario??? aí nesse caso, vc estaria construindo um funcionário a partir de outro funcionário… isso em código ficaria assim:

Funcionario (Funcionario f)

{

super(f.getNome(), f.getId(), f.getNasc());

adm = f.getAdm();

sal = f.getSal();

}

Dessa forma, o construtor de ChefedeDepartamento fica:

ChefedeDepartamento(Funcionario funcionario, String dep, Data prom)

{

super(funcionario);

/* Obseve que é bem mais simples que a linha abaixo… e é a mesma coisa

super(funcionario.getNome(), funcionario.getId(), funcionario.getNasc(), funcionario.getAdm(), funcionario.getSal());

*/

departamento=dep;

promocaoAChefe=prom;

}

Estendendo a idéia, vc pode construir uma pessoa a partir de uma pessoa…

M

Carisio,

Vc chegou a rodar isso em alguma vez? Pq eu faço exatamente como vc diz e sempre o compilador da erro.

nessa linha

super(funcionario.getNome(), funcionario.getId(), funcionario.getNasc(), funcionario.getAdm(), funcionario.getSal());

O erro é " Cannot resolve symbol - method getNome();

suponho que pros outros vai dar a mesma coisa. Faz o seguinte, tenta compilar outros cm fiz, e tenta fazer isso q disse… Acho que rodando o programa vc verá o que estou falando.

Obrigado irmao.

MigMax

J

“MigMax”:
Carisio,

Vc chegou a rodar isso em alguma vez? Pq eu faço exatamente como vc diz e sempre o compilador da erro.

nessa linha

super(funcionario.getNome(), funcionario.getId(), funcionario.getNasc(), funcionario.getAdm(), funcionario.getSal());

O erro é " Cannot resolve symbol - method getNome();

suponho que pros outros vai dar a mesma coisa. Faz o seguinte, tenta compilar outros cm fiz, e tenta fazer isso q disse… Acho que rodando o programa vc verá o que estou falando.

Obrigado irmao.

MigMax

Acontece que o método getNome() não existe na classe Funcionário, por isso dá este erro.
:wink:

M

É … so que eu fiz a mudança na classe funcionario e da um erro bem semelhante.

C

Fez as mudanças direitinho? Tem certeza?

Segue os arquivos… já tá testando, compila direitinho. Só tirei o esquema da classe Data pq vc não postou ela também.

O erro q vc reportou é pq vc nao tinha os métodos getId, getNome etc e tal, tinha q ter isso tb.

------------------------------ Pessoa.java ------------------------------

class Pessoa{

public String nome;

private int identidade;
Pessoa(String n, int i){ 
    nome=n; identidade=i; 
} 
public String toString(){ 
    return "Nome:"+ nome + "\n Identidade:" + identidade;
} 
public String getNome() { return nome; }
public int getId() { return identidade; }

}
------------------------------ FIM Pessoa.java ------------------------------

------------------------------ Funcionario.java ------------------------------

class Funcionario extends Pessoa{

private float salario;
Funcionario(String nome, int id, float sal){ 
    super(nome,id); 
    salario=sal; 
} 
public String toString(){ 
    String resultado; 
    resultado= super.toString()+ "\n"; 
    resultado= resultado + "Salario:" + salario; 
    return resultado; 
} 
public float getSal()
{
   return salario;
}

}
------------------------------ FIM Funcionario.java ------------------------------

-------------------- ChefedeDepartamento.java ---------------------------

class ChefedeDepartamento extends Funcionario{

private String departamento;
ChefedeDepartamento(Funcionario funcionario, String dep)

{

super(funcionario.getNome(), funcionario.getId(), funcionario.getSal());

departamento=dep;

}
public String toString(){

String resultado;

resultado= super.toString()+"\n";

resultado= resultado + Departamento: + departamento + “\n;

return resultado;

}

public String qualDepartamento(){

return departamento;

}

}
-------------------- FIM ChefedeDepartamento.java ---------------------------

M

Aé garoto!!! Parabensss… agora sim…

Show de Bola mesmo.

Valeu parceiro…

MigMax

Criado 27 de abril de 2004
Ultima resposta 28 de abr. de 2004
Respostas 8
Participantes 3