Construtores com o mesmo nome mas com parametros diferentes

39 respostas
F

eu tenho dois construtores na classe Funcionario por exemplo, tenho que faze-las separadas?

public Funcionario(campos) {


}

e

public Funcionario(campos e mais outros campos) {


}

?

39 Respostas

F
frnd_:
eu tenho dois construtores na classe Funcionario por exemplo, tenho que faze-las separadas?
public Funcionario(campos) {

  ........
}
e
public Funcionario(campos e mais outros campos) {

......
}
? e no caso de metodos com mesmo nome e com parametros diferentes? eu faço a mesma coisa?

acopiara

Sim, isso se chama sobrecarga de métodos ou construtores.

kaique

Isso se chama sobrecarga de métodos e construtores…existe muito material bom pela web e qualquer livro que fale sobre java também fala desse princípio básico…dá uma estudada nisso, é legal…

[]'s.

peczenyj

Falando nisso, alguem ja viu um construtor com varags? :twisted:

F

existe dois metodos da classe funcionario, reajustarSalario(percentual: int): void e o reajustarSalario(valor: double): void, então não tenho a ideia do que esses metodos fazem, vcs tem alguma ideia?

[]s

peczenyj

sera que eles não… Reajustam o Salário ?

Vejamos, nós temos um Funcionário.

Um funcionário TEM um salário.

Vc é o chefão, bondoso e cheio da grana, que chega e envia uma mensagem ao objeto funcionario: Reajuste o seu salário em 20 porcento.

Bom, o que acontece é que, com essa mensagem, o seu salário fica matematicamente 20 % maior.

A mensagem poderia ser outra: Reajuste o seu salário em 1000 reais.

MAS BAH!!! Melhor ainda!

Mas como isso funciona? qual a implementação?

A mais ‘obvia’ seria vc fazer algo assim

public void reajusta(double bonus){ this. salario = this.salario + bonus; }

Sacou?

F

certo... mas e nesse caso? como funcionaria?

[code] public void reajustarSalario(int percentual){
this.salario = this.salario + percentual;
}



public void reajustarSalario (double valor) {

/* e aqui exibirá o valor JÁ COM PERCENTUAL? */

}

F

certo... mas e nesse caso? como funcionaria?

public void reajustarSalario(int percentual){
                                      this.salario = this.salario + percentual;
                                }
    
			
	
	public void reajustarSalario (double valor) {

	            /* e aqui exibirá o valor JÁ COM PERCENTUAL? */ 
		
		}
peczenyj

Tu tem um salario de 1000 reais e recebeu um almento de 10%, pra quanto ele foi?

F

1100

F

criei esse programa:

import java.util.*;


public class Funcionario {
	
	private int id;
	private String nome;
	private int diaNasc;
	private int mesNasc;
	private int anoNasc;
	private char sexo;
	private double salario;
	private String cargo;	
	
	
	public Funcionario(int id, String nome, char sexo) {
	
	this.id = id;
	this.nome = nome;
	this.sexo = sexo;
	}
	
	public Funcionario(int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario){
	this.id = id;
	this.nome = nome;
	this.diaNasc = diaNasc;
	this.mesNasc = mesNasc;
	this.anoNasc = anoNasc;
	this.sexo = sexo;
	this.salario = salario;	
	}
	
	public void reajustarSalario(int percentual){
	
	 this.salario = this.salario + percentual;	
    
		
	}
	
	public void reajustarSalario (double valor) {
	
	   
		
		
	}
	
	public int getId(){
		return id;
	}  
	
	public String getNome(){
		return nome; 
	} 
	
	public int getDiaNasc(){
		return diaNasc;
	}
	
	public int getMesNasc(){
		return mesNasc;
	}
	
	public int getAnoNasc(){
		return anoNasc;
	}
	
	public char getSexo(){
		return sexo;
	}
	
	public double getSalario(){
		return salario;
	}
	
	public void setId(int id){
		this.id = id;
	}
	
	public void setNome(String nome){
		this.nome = nome;
	}
	
	public void setDiaNasc(int diaNasc){
		this.diaNasc = diaNasc;
	}
	
	public void setMesNasc(int mesNasc){
		this.mesNasc = mesNasc;
		
	}
	
	public void setAnoNasc(int anoNasc){
		this.anoNasc = anoNasc;
	}
	
	public void setSexo(char sexo){
		this.sexo = sexo;
	}
	
	public void setSalario(double salario){
		this.salario = salario;
	}
}

e no main

public class FuncionarioMain {
	
	public static void main(String args[]){
	
	
	Funcionario f = new Funcionario();
	}
	
}

nessa linha
“Funcionario f = new Funcionario();”
eu coloco
“Funcionario f = new Funcionario(valores);”
de qual construtor?

obs: a classe funcionario é ligado com a classe Motorista…

F

oi?

diego2005

Não entendi sua dúvida, explique melhor.

T+

F

dificuldades no Main… ele nao funciona, dá erro no quando eu instancio o com a classe funcionario

peczenyj

sim, vai dar problema.

quando vc não declara um construtor, vc pode instanciar um objeto atraves do contrutor ‘padrão’

MEUobjeto xxx = new MEUobjeto();

agora, quando vc declara um construtor diferente do padrão, ja não tem mais este construtor implícito. precisas declara-lo então de forma explicita, que quer usar.

existe um motivo de design para um objeto ter um, varios ou nenhum construtor público. se vc tem um construtor que aceita parâmetros, então foi definido assim por alguma razão.

Pessoa p = new Pessoa();

Pessoa p = new Pessoa(fulano);

Pessoa p = new Pessoa(fulano,44,false);

Vc vai usar cada construtor acima na situação que achar melhor. talvez ter tantos seja um problema, ou talvez tenha poucos até, isso varia de acordo com o problema que vc ta tratando.

De uma olhada na classe File:
http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html

Agora boa sorte :wink:

F

Utilizei essa classe Main para rodar o programas mas nao funcionou, oque eu faço?

[]s

public class FuncionarioMain {
	
	public static void main(String args[]){
	
	
	Funcionario f = new Funcionario(1, Fernando, 10, 2, 1998, M, 1200);
	}
	
}
F
frnd:
Utilizei essa classe Main para rodar o programas mas nao funcionou, oque eu faço?

[]s

public class FuncionarioMain {
	
	public static void main(String args[]){
	
	
	Funcionario f = new Funcionario(1, "Fernando", 10, 2, 1998, "M", 1200);
	}
	
}
diego2005

Qual o erro??

T+

F
symbol  : constructor Funcionario(int,java.lang.String,int,int,int,java.lang.String,int)

location: class Funcionario

Funcionario f = new Funcionario(1, Fernando, 10, 2, 1998, M, 1200);

^

1 error

Process completed.

diego2005

Você está passando o sexo assim:

"M"

E o seu construtor recebe um char, então você tem que passar assim:

'M'

Aspas duplas são para Strings, e simples para char:

Funcionario f = new Funcionario(1, "Fernando", 10, 2, 1998, 'M', 1200);

T+

F

existem dois metodos com o mesmo nome, reajustarSalario… no primeiro ele recebe como parametro o percentual: int, de aumento no salario… o seguinte recebe valor: double, então creio que no segundo ele já traz o salario ja com percentual para sua classe e mostra … é isso mesmo?

public void reajustarSalario(int percentual){
	
	 this.salario = this.salario + percentual;
	 
    
		
	}
	
	public void reajustarSalario (double valor) {
	
	valor = this.salario;
	   
	System.out.print(valor);	
		
	}
diego2005

No primeiro ele faz um reajuste no salário:

this.salario = this.salario + percentual;

mas no segundo ele não faz nada, apenas exibe o salário atual.

T+

F

tá ok! obrigado!

F

e como faço para testar no Main com todos os dados que passei na classe? a partir dos dados digitados pelo usuario?

[]s

diego2005

Tem várias maneiras, você pode solicitar os dados ao usuário através do console (classe Scanner), através de diálogos (classe JOptionPane) ou através de uma interface gráfica (classe JFrame, JDialog, entre outras)…

T+

T

Cara, não sei se estou vendo certo, pois já passou meu horário de dormir. Mas qual o erro na hora de instanciar? Visualização ?

F

atualmente estou mexendo com o Scanner… mas como eu pegaria os dados do usuario, os atributos da classe… e dps os metodos…

F

está dando erro sempre na linha 9 e 13 dessa classe, oque tem de errado?

import java.util.*;

public class Motorista extends Funcionario {
	
	private long cnh;
	private char categoriaCnh;
	
	
	public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {
		
    this.cnh = cnh;
    this.categoriaCnh = categoriaCnh;                                                                        
    super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);
     	
	}
	   
	public long getCnh(){
		return cnh;
	}   
	
	public char categoriaCnh(){
		return categoriaCnh;
	}
	
	public void setCnh(long cnh){
        this.cnh = cnh;		
 	} 
 	
 	public void setcategoriaCnh(char categoriaCnh){
 		this.categoriaCnh = categoriaCnh; 
 	}
	
}
diego2005

Uma chamada a super deve ser a primeira instrução em um construtor:

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) { super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario); this.cnh = cnh; this.categoriaCnh = categoriaCnh; }

T+

F

mas ainda dá erro…

--------------------Configuration: --------------------

G:\Revisao\Motorista.java:9: { expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9: ; expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9:  expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9:  expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9:  expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9:  expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9:  expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9:  expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9:  expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9:  expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:9: ; expected

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {

^

G:\Revisao\Motorista.java:10: .class expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:10: ; expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:10:  expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:10:  expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:10:  expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:10:  expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:10:  expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:10:  expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:10: ; expected

super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario);

^

G:\Revisao\Motorista.java:30: reached end of file while parsing

}

Process completed.
italo.vendrameto

Não sei entendi bem mas a chamada do seu construtor ainda apresenta erros, pois vc está chamando o construtor da superclasse e não redeclarando.

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) { super(int id,String nome,int diaNasc,int mesNasc,int mesNasc, int anoNasc, char sexo, double salario); this.cnh = cnh; this.categoriaCnh = categoriaCnh; }
Deveria ficar assim

public class Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) { super( id, nome, diaNasc, mesNasc, mesNasc, anoNasc, sexo, salario); this.cnh = cnh; this.categoriaCnh = categoriaCnh; }
note que na chamada do super não há nenhum identificador

F

ok funcionou desta forma

public class Motorista extends Funcionario {
	
	private long cnh;
	private char categoriaCnh;
	
	
    public Motorista (int id, String nome, int diaNasc, int mesNasc, int anoNasc, char sexo, double salario, long cnh, char categoriaCnh) {
     super(id, nome, diaNasc, mesNasc, anoNasc, sexo, salario);
       this.cnh = cnh;     
       this.categoriaCnh = categoriaCnh;                                                                  
             
 }	
    public long getCnh(){
		return cnh;
	}   
	
	public char categoriaCnh(){
		return categoriaCnh;
	}
	
	public void setCnh(long cnh){
        this.cnh = cnh;		
 	} 
 	
 	public void setcategoriaCnh(char categoriaCnh){
 		this.categoriaCnh = categoriaCnh; 
 	}
	
}
F

estou tentando criar o Main para rodar a classe Funcionario, mas... dá erro na classe Scanner, eu declarei errado? ou em lugar errado?

public class FuncionarioMain {
	
	public static void main(String args[]){
	
	Funcionario f;
	Scanner scan = new Scanner(System.in);
	int id; 
	String nome; 
	int diaNasc; 
	int mesNasc; 
	int anoNasc; 
	char sexo; 
	double salario;
	
	System.out.println("Entre com o ID do Funcionario");
	id = scan.nextInt();
	
	System.out.println("Entre com o nome do Funcionario");
	nome = scan.nextLine();
	
	System.out.println("Entre com o dia de nascimento do Funcionario");
	diaNasc = scan.nextInt();
	
	System.out.println("Entre com o mes de nascimento do Funcionario");
	mesNasc = scan.nextInt();
	
	System.out.println("Entre com o ano de nascimento do Funcionario");
	anoNasc = scan.nextInt();
	
	System.out.println("Entre com o sexo do Funcionario");
	sexo = scan.nextChar();
	
	System.out.println("Entre com o salario do Funcionario");
	salario = scan.nextDouble();
	
	}
	

}

--------------------Configuration: --------------------
G:\Revisao\FuncionarioMain.java:6: cannot find symbol
symbol : class Scanner
location: class FuncionarioMain
Scanner scan = new Scanner(System.in);
^
G:\Revisao\FuncionarioMain.java:6: cannot find symbol
symbol : class Scanner
location: class FuncionarioMain
Scanner scan = new Scanner(System.in);
^
2 errors

Process completed.

diego2005

Você esqueceu de importar a classe Scanner:

import java.util.Scanner;

T+

F

criei esse programa mas não consigo rodar certinho… dá erro quando eu instancio o objetos

import java.util.Scanner;

public class FuncionarioMain {
	
	public static void main(String args[]){
	
	Funcionario f;
	Scanner scan = new Scanner(System.in);
	int id; 
	String nome; 
	int diaNasc; 
	int mesNasc; 
	int anoNasc; 
	char sexo; 
	double salario;
	double valor;
	
	System.out.println("Entre com o ID do Funcionario");
	id = scan.nextInt();
	[b]f = new Funcionario(id);[/b]
	System.out.println("Entre com o nome do Funcionario");
	nome = scan.nextLine();
	[b]f = new Funcionario(nome);[/b]
	System.out.println("Entre com o dia de nascimento do Funcionario");
	diaNasc = scan.nextInt();
	[b]f = new Funcionario(diaNasc);[/b]
	System.out.println("Entre com o mes de nascimento do Funcionario");
	mesNasc = scan.nextInt();
	[b]f = new Funcionario(mesNasc);[/b]
	System.out.println("Entre com o ano de nascimento do Funcionario");
	anoNasc = scan.nextInt();
	[b]f = new Funcionario(anoNasc);[/b]
	System.out.println("Entre com o sexo do Funcionario");
	sexo = scan.nextLine().charAt(0);
	[b]f = new Funcionario(sexo);[/b]
	System.out.println("Entre com o salario do Funcionario");
	salario = scan.nextDouble();
	[b]f = new Funcionario(salario);[/b]
	

	}
	

}
F

rs, o erro poderia estar mostrando onde está o negrito ‘[b]’

diego2005

Você tem que fazer assim:

import java.util.Scanner;
 
public class FuncionarioMain {
 	
    public static void main(String args[]) { 	
 	Funcionario f;
 	Scanner scan = new Scanner(System.in);
 	int id; 
 	String nome; 
 	int diaNasc; 
 	int mesNasc; 
 	int anoNasc; 
 	char sexo; 
 	double salario;
 	double valor;
 	
 	System.out.println("Entre com o ID do Funcionario");
 	id = scan.nextInt();
 	System.out.println("Entre com o nome do Funcionario");
 	nome = scan.nextLine();
 	System.out.println("Entre com o dia de nascimento do Funcionario");
 	diaNasc = scan.nextInt();
 	System.out.println("Entre com o mes de nascimento do Funcionario");
 	mesNasc = scan.nextInt();
 	System.out.println("Entre com o ano de nascimento do Funcionario");
 	anoNasc = scan.nextInt();
 	System.out.println("Entre com o sexo do Funcionario");
 	sexo = scan.nextLine().charAt(0);
 	System.out.println("Entre com o salario do Funcionario");
 	salario = scan.nextDouble();

     	
                f = new Funcionario(id,nome,diaNasc,mesNasc,anoNasc,sexo, salario,valor);
       }
 	
 
 }
F

mas tá mostrando errado quando eu executo o programa (dps de compilado)
ele pede o ID, eu digito e dps pede ao mesmo tempo nome e dia de nascimento… dps pede 1 de cada vez quando chega no sexo ele mostra o erro StringIndexOutOfBoundsException

oque fazer?

[]s

diego2005

Tenta assim:

import java.util.Scanner;
  
public class FuncionarioMain {
  	
    public static void main(String args[]) { 	
        Funcionario f;
  	Scanner scan = new Scanner(System.in);
  	int id; 
  	String nome;
  	int diaNasc; 
  	int mesNasc; 
  	int anoNasc; 
  	char sexo; 
  	double salario;
  	double valor;
  	
  	System.out.println("Entre com o ID do Funcionario");
  	id = scan.nextInt();
  	System.out.println("Entre com o nome do Funcionario");
	scan.nextLine();
  	nome = scan.nextLine();
  	System.out.println("Entre com o dia de nascimento do Funcionario");
  	diaNasc = scan.nextInt();
  	System.out.println("Entre com o mes de nascimento do Funcionario");
  	mesNasc = scan.nextInt();
  	System.out.println("Entre com o ano de nascimento do Funcionario");
  	anoNasc = scan.nextInt();
  	System.out.println("Entre com o sexo do Funcionario");
	scan.nextLine();
	sexo = scan.nextLine().charAt(0);
  	System.out.println("Entre com o salario do Funcionario");
  	salario = scan.nextDouble();
 
      	
        f = new Funcionario(id,nome,diaNasc,mesNasc,anoNasc,sexo, salario,valor);
    }
}

T+

Criado 10 de agosto de 2007
Ultima resposta 16 de ago. de 2007
Respostas 39
Participantes 8