Problema passando parâmetros no Construtor!

10 respostas
D

E aew galera. Seguinte, tenho a classe Funcionario com o seguinte código:

package br.com.active.exercicio1.rh;
public class Funcionario {
    /**
     * Atributos da classe
     */

    /**
     * Nome do Fucionério
     */
    public String nome;
    /**
     * Sexo, valores possíveis (M, F)
     */
    public char sexo;
    /**
     * Idade do Funcionário
     */
    public byte idade;
    /**
     * Salário do Funcionário
     */
    public float salario;
    /**
     * Atributo estático que armazena a quantidade de funcionários
     */
    public static int quantFuncionarios;
    /**
     * Constantes de salários de funcionários
     */
    public static final float salarioGERENTE = 2500;
    public static final float salarioANALISTA = 1800;
    public static final float salarioPROGRAMADOR = 1000;


    /**
     * Construtor, inicializando os atributos e
     * incrementando a quantidade de pessoas
     */
    public Funcionario() {
        nome = "";
        sexo = ' ';
        idade = 1;
        salario = 0;
        quantFuncionarios++;
    }

    /**
     * Método que devolve a quantidade de funcionários
     */
    public static void quantFuncionarios(){
        System.out.println("Funcionários da empresa: " + quantFuncionarios);
    }
}

e também tenho a classe gerente que herda de funcionario:

package br.com.active.exercicio1.rh;

public class Gerente extends Funcionario{
    /**
     * Construtor de Gerente
     * Seta nos atributos os valores
     */
    Gerente(String nome, byte idade, float salario, char sexo){
        super();
        this.nome = nome;
        this.idade = idade;
        this.salario = salario;
        this.sexo = sexo;
    }
}

Mas esta dando erro de Simbolo não pode ser resolvido com a palavra NEW na classe empresa que estancia Gerente:

package br.com.active.exercicio1.empresa;

//Imports
import br.com.active.exercicio1.rh.*;

public class Empresa {

    public Empresa() {
    }

    public static void main(String[] args) {
        //Gerente gerente = [b]new[/b] Gerente("Carlos III", 38, Funcionario.salarioGERENTE, 'M');
        Gerente gerente = new Gerente();

        System.out.println("Nome do gerente: " + gerente.nome);
        System.out.println("Idade do gerente: " + gerente.idade);
        System.out.println("Salário do gerente: " + gerente.salario);
        System.out.println("Sexo do gerente: " + gerente.sexo);
    }}

Consegui chamar o construtor normal(sem parametros) mas nesse com parametros da esse erro ai que citei, e não sei porque. Alguem poderia ligar o abajur? :razz: hehehe

Vlw.

10 Respostas

D

Quando você faz uma classe estender outra e você define um novo método construtor, os métodos construtores da classe pai não podem ser acessados diretamente numa instanciação.

No caso, você terá que fazer da seguinte forma:

public class Gerente extends Funcionario{ 
    /** 
     * Construtor de Gerente 
     * Seta nos atributos os valores 
     */ 

    Gerente(){
        super();
    }
    Gerente(String nome, byte idade, float salario, char sexo){ 
        super(); 
        this.nome = nome; 
        this.idade = idade; 
        this.salario = salario; 
        this.sexo = sexo; 
    } 
}
D

Colega tentei fazer isso daê e n deu n. E agora?

D

oops....

Gerente()
	{
		super();
	}
	
    Gerente(String nome, byte idade, float salario, char sexo){ 
        this(); 
        this.nome = nome; 
        this.idade = idade; 
        this.salario = salario; 
        this.sexo = sexo; 
    }
D

Eu testei das duas formas e tb da o erro no mesmo lugar! :sad:

D

Que estranho não? Aqui funcionou perfeitamente.

T

Amigo,no lugar de byte coloca int…

Valew!!!

D

Valew cara, deu certim.
Mas você pode me explicar porque com o byte não funcionava?
Tem restrições de tipo é como no switch??

Grato :wink:

D

Resolvi o problema mas não entendi, alguem pode me explicar porque o byte n pode ser usado no constructor???

ficou assim:

public class Gerente extends Funcionario{
    /**
     * Construtor com modificador default,
     * invoca o construtor da superclasse (<i>Funcionario</i>)
     */
    Gerente(){
        super();
    }

    /**
     * Construtor público da classe, seta nos atributos os valores recebidos
     */
    public Gerente(String nome, char sexo, int idade, float salario){
        //Chama o construtor default da classe
        this();
        this.nome = nome;
        this.sexo = sexo;
        this.idade = idade;
        this.salario = salario;
    }
F

The Byte class wraps a value of primitive type byte in an object. An object of type Byte contains a single field whose type is byte.

In addition, this class provides several methods for converting a byte to a String and a String to a byte, as well as other constants and methods useful when dealing with a byte.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Byte.html#Byte(byte)

D

“FelipeSS_2”:
The Byte class wraps a value of primitive type byte in an object. An object of type Byte contains a single field whose type is byte.

In addition, this class provides several methods for converting a byte to a String and a String to a byte, as well as other constants and methods useful when dealing with a byte.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Byte.html#Byte(byte)

Valew colega.
mas me diz uma coisa, ei usei o tipo primitivo byte e não a classe Byte, não há uma diferença? Ou estou enganado?

Obrigado!

Criado 28 de junho de 2005
Ultima resposta 29 de jun. de 2005
Respostas 10
Participantes 4