Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JosimarNew

problema no uso de extends (herança)

Recommended Posts

Bom dia galera do Fórum iMasters.

 

Venho pedir ajude de vocês com uma dúvida que me surgiu agora. Vou postar o código abaixo.

class teste{
   public static void main(String[] args){

      empresa minhaEmpresa = new empresa("JBGTec", "0998667643");

      System.out.println("Empresa: "+minhaEmpresa.getNome());
      System.out.println("CNPJ: "+minhaEmpresa.getCnpj());

      minhaEmpresa.contrata(5);

   }
}

//EMPRESA
class empresa{
   private String nome,
                  cnpj;
   funcionario[] empregados = new funcionario[10];

   public empresa(String empNome, String empCnpj){
      this.nome = empNome;
      this.cnpj = empCnpj;
   }

   public String getNome(){
      return this.nome;
   }

   public String getCnpj(){
      return this.cnpj;
   }

   void contrata(int qtdFuncionarios){
      for(int count=0; count < qtdFuncionarios; count++){
         empregados[count] = new funcionario();
      }
   }

   void admite(){

   }
}

//FUNCIONÁRIOS
class funcionario{
   private String nome,
                  departamento;
   private double salario;
   private int funcNumero;
   static int qtdFuncionarios = 0;

   //construtor que recebe o numero do funcionário
   //AO DESCOMENTAR ESSAS LINHAS, O ERRO APARECE. POIS ESTOU ENVIANDO UM VALOR INTEIRO PARA O METODO CONSTRUTOR
   //E AO TENTAR EXTENDER UMA CLASSE gerente DESSA, APARECE O ERRO
   //000035: cannot find symbol
   /*funcionario(int numeroFunc){
      funcionario.qtdFuncionarios+=1;
      this.funcNumero = numeroFunc;
      System.out.println("Contratando um novo funcionário: "+qtdFuncionarios);
   }*/

   public void setNome(String nome){
      this.nome = nome;
   }

   public void setDepartamento(String departamento){
      this.departamento = departamento;
   }

   public void setSalario(double salario){
      this.salario = salario;
   }

   public int getNumero(){
      return this.funcNumero;
   }

   public String getNome(){
      return this.nome;
   }

   public String getDepartamento(){
      return this.departamento;
   }

   public double getSalario(){
      return this.salario;
   }

   public void aumento(double valor){
      this.salario += valor;
   }
}

//CLASSE EXTENDIDA DE FUNCIONÁRIOS - GERENTE
class gerente extends funcionario{
   int senha = 1234567;
   String nome;
   double salario;
}

O problema se encontra ao tentar extender a classe gerente da classe funcionario.

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em Java toda classe tem internamente um construtor padrão sem parâmetros, algo como;
[inline]NomeClasse(){
}[/inline]

Portanto se você declarar um ou mais construtores você deixa de ter este construtor padrão.

Outra coisa é que quando criamos um novo objeto o construtor deste, antes de qualquer coisa, chama automaticamente o construtor da sua super classe que chama o construtor da sua super classe sucessivamente até chegar em Object, assim, os objetos são construídos de cima para baixo.

Como na sua classe funcionário você usou um construtor com argumentos ao criar o objeto gerente ele chamou o construtor padrão que não existia, por isso você deve criar um na subclasse que passe o parâmetro pedido no construtor da super classe

[inline]
gerente(int numeroFunc){
super(numeroFunc);
}
[/inline]
Uma dica; em Java o nome das classes devem iniciar com maiúsculas.
Outra coisa; declarar variáveis assim
[inline]
private String nome,
cnpj;
[/inline]
não é padrão Java.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew meu

 

 

Em Java toda classe tem internamente um construtor padrão sem parâmetros, algo como;
[inline]NomeClasse(){
}[/inline]

Portanto se você declarar um ou mais construtores você deixa de ter este construtor padrão.

Outra coisa é que quando criamos um novo objeto o construtor deste, antes de qualquer coisa, chama automaticamente o construtor da sua super classe que chama o construtor da sua super classe sucessivamente até chegar em Object, assim, os objetos são construídos de cima para baixo.

Como na sua classe funcionário você usou um construtor com argumentos ao criar o objeto gerente ele chamou o construtor padrão que não existia, por isso você deve criar um na subclasse que passe o parâmetro pedido no construtor da super classe

[inline]
gerente(int numeroFunc){
super(numeroFunc);
}
[/inline]
Uma dica; em Java o nome das classes devem iniciar com maiúsculas.
Outra coisa; declarar variáveis assim
[inline]
private String nome,
cnpj;
[/inline]
não é padrão Java.

 

 

Valew meu parceiro Bezerk, compreendi bem o que falou.

Esse foi praticamente meu primeiro contato com o java, pois estou migrando agora, e ainda me adaptando a esse novo universo. E foi muito esclarecedor o que vc falou. Valew e fica com Deus. +1 pra você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.