Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Introduzir um Construtor em outra classe

Estava tentando Criar uma classe Gerente que herdadas atributos do funcionários, porém um dos meus atributos é um construtor, e ele não compila . Classe Funcionario :

// Start
package bankingcoid.herdado;
public class Funcionario {
    //variables
    private String nome ;
    private String cpf;
    private double salario;

    //head
    public Funcionario(String nome, String cpf, double salario){
        this.nome = nome;
        this.cpf = cpf;
        this.salario = salario;
    }
    public double getBonificacao(){
     return  this.salario*1.1;  
    }
    //body
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCpf() {
        return cpf;
    }
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    public double getSalario() {
        return salario;
    }
    public void setSalario(double salario) {
        this.salario = salario;
    }
}
//finesh

Classe Gerente :

//start
package bankingcoid.herdado;
public class Gerente extends Funcionario{
    //variables
    private int senha;

    //head
    public boolean autentica(int senha){
        if(this.senha == senha){
         return true;
        }else
            return false;
    }
    public double getBonificacao(){
     return  this.salario*1.1;  
    }
    //body

}
//finesh
3 respostas

Tente incluir na classe Gerente o construtor abaixo, pelo que entendi as classes que recebem herança nao herdam o construtor,.

public Funcionario(String nome, String cpf, double salario){

               super(nome, cpf,  salario);
        }

Não deve passar qualquer coisa para o construtor da classe pai. Isso não tem tanto a ver com orientação a objetos.

Se a classe pai recebe um nome então a classe filha precisa receber esses valores além dos que ela mesmo já recebe.

solução!

Na herança em Java somente o Construtor padrão é herdado, ou seja, aquele que não recebe nenhum parâmetro e se não é escrito fica implícito (O compilador adiciona ele). Entretanto se você escrever um outro construtor diferente do padrão, ou seja, que receba parâmetros, o construtor padrão deixa de "existir" (O compilador não mais adiciona o mesmo). Desta forma, para que a herança funcione corretamente você tem duas opções: 1 - Adicionar um Construtor para a Classe filha que receba os mesmos parâmetros da Classe Mãe e dentro desse construtor chamar o Construtor da Classe Mãe com o comando super e passar pra ele os parâmetros necessários.

package bankingcoid.herdado;
public class Gerente extends Funcionario{
    //variables
    private int senha;

    public Gerente(String nome, String cpf, double salario){
       super(nome, cpf, salario); 
   }

    //Resto do Codigo da Classe

2 - Como o Construtor padrão deixa de ser adicionado a Classe Mãe por você ter escrito outro, escrever você mesmo um Construtor Padrão na Classe Mãe, eliminando assim a necessidade de um Construtor nas Classes Filhas.

public class Funcionario {
    //variables
    private String nome ;
    private String cpf;
    private double salario;

   public Funcionario(){
   }
    //head
    public Funcionario(String nome, String cpf, double salario){
        this.nome = nome;
        this.cpf = cpf;
        this.salario = salario;
}

//Resto da Classe

O Construtor não é obrigado a implementar nada, por isso o corpo entre chaves vazio, apenas pra que exista um construtor padrão e isso não quebre a herança ou te obrigue a implementar a chamar os outros possíveis construtores. Não há limite de construtores em uma classe desde que tenham assinaturas diferentes.

E só uma coisinha, Construtor não é Atributo.

Boa noite