Herança

6 respostas
M
Salve! Então estou com um problema, tenho essas 3 classes, e quero fazer com que eu crie acredito que uma função na classe pai e q faça com que todas recebam. O que quero é imprimir todos os dados,
System.out.println(nome + ", Salário: " + salario + " " + cargo + ", Bonificação: " + comissao);
Eu poderia criar em todos os objetos, mas quero criar uma vez só.

abçs.

class Funcionario {
	String nome;
	int idade;
	double salario;
	double valor;
	String cargo;
	
	void bonificacao (double comissao) {
		comissao = salario * 0.5;
		
	}
}


class Diretor extends Funcionario {
		
		void bonificacao () {
				valor = salario * 0.5 + 1000;
				salario += valor;
	}
}
		
class Seguranca extends Funcionario {
			
		void bonificacao () {
				valor = salario * 0.5;
				salario += valor;
			
	}
}

public class Teste {
	
	public static void main (String[] args) {
		Funcionario funcionario = new Funcionario();
		
		funcionario.nome = "João";
		funcionario.idade = 30;
		funcionario.salario = 1500.0;
		funcionario.cargo = "Funcionário";
		funcionario.bonificacao(0);
		
		Diretor diretor = new Diretor();
		
		diretor.nome = "Pedro";
		diretor.idade = 40;
		diretor.salario = 5000.0;
		diretor.cargo = "Diretor";
		diretor.bonificacao(0);
		
		Seguranca seguranca = new Seguranca();
		
		seguranca.nome = "Joaquim";
		seguranca.idade = 28;
		seguranca.salario = 800.0;
		seguranca.cargo = "Segurança";
		seguranca.bonificacao(0);
		
		
		}
}

6 Respostas

peczenyj

coloca, na classe pai:

public String toString(){ return this.nome + ", Salário: " + this.salario + " " + this.cargo + ", Bonificação: " + this.comissao; }

Depois faz

System.out.println(meuObjeto);

M

Vlw pela resposta, mas está imprimindo "Funcionario@ea2dfe", alguém tem alguma alternativa???

abçs

ficou assim:

class Funcionario {  
	 String nome;  
	 int idade;  
	 double salario;  
	 String cargo;
	 double comissao;  
       
	 void bonificacao (double comissao) {  
		 comissao = salario * 0.5;  
           
	 }  
	 public String Dados(){  
	       return this.nome + ", Salário: " + this.salario + " " + this.cargo + ", Bonificação: " + this.comissao;   
	 } 
}  
   
   
 class Diretor extends Funcionario {  
           
	 void bonificacao (double comissao) {  
		 comissao = salario * 0.5 + 1000;  
     
	 }  
}  
           
class Seguranca extends Funcionario {  
               
	void bonificacao (double comissao) {  
		 comissao = salario * 0.5;  
               
	 }  
}  
   
 public class Teste1 {  
       
	 public static void main (String[] args) {  
		
         
		 Funcionario funcionario = new Funcionario();  
           
		 funcionario.nome = "João";  
		 funcionario.idade = 30;  
		 funcionario.salario = 1500.0;  
		 funcionario.cargo = "Funcionário";  
		 funcionario.bonificacao(0);
		 funcionario.Dados();
		 
		 System.out.println(funcionario);
 
         Diretor diretor = new Diretor();  
           
		 diretor.nome = "Pedro";  
		 diretor.idade = 40;  
		 diretor.salario = 5000.0;  
		 diretor.cargo = "Diretor";  
		 diretor.bonificacao(0);  
           
		 Seguranca seguranca = new Seguranca();  
           
		 seguranca.nome = "Joaquim";  
		 seguranca.idade = 28;  
		 seguranca.salario = 800.0;  
		 seguranca.cargo = "Segurança";  
		 seguranca.bonificacao(0);  
           
           
		 }  
}
rodrigoallemand
Não seria...
public class Teste1 {  
       
	 public static void main (String[] args) {  
		
         
		 Funcionario funcionario = new Funcionario();  
           
		 funcionario.nome = "João";  
		 funcionario.idade = 30;  
		 funcionario.salario = 1500.0;  
		 funcionario.cargo = "Funcionário";  
		 funcionario.bonificacao(0);
		 funcionario.Dados();
		 
		 System.out.println(funcionario.Dados()); //O ERRO ESTA AQUI
 
         Diretor diretor = new Diretor();  
           
		 diretor.nome = "Pedro";  
		 diretor.idade = 40;  
		 diretor.salario = 5000.0;  
		 diretor.cargo = "Diretor";  
		 diretor.bonificacao(0);  
           
		 Seguranca seguranca = new Seguranca();  
           
		 seguranca.nome = "Joaquim";  
		 seguranca.idade = 28;  
		 seguranca.salario = 800.0;  
		 seguranca.cargo = "Segurança";  
		 seguranca.bonificacao(0);  
           
           
		 }  
}

Vc está passando o objeto para o sysout... com isso, ele chama o toString da classe, que ainda herda de object e escreve o nome da classe e o hashCode (acho eu) dela...

Se vc quer com que, só passando o seu objeto funcionario, o sysout imprima ele conforme vc pensou, reescreva o método toString!

Paulo_Silveira

coloque a invocacao do metodo Dados() dentro do System.out.println(). Simplesmente invoca-lo nao imprime nada, certo?

Mas o melhor é reescrever mesmo o metodo toString, em vez de criar seu proprio metodo.

ViniGodoy

A alternativa é fazer o que o colega te falou. Implementar o método toString(). O java, por padrão, chama o método toString quando vc manda imprimir um objeto sem especificar nenhum método. Ou seja:
System.out.println(funcionario);

Equivale à:
System.out.println(funcionario.toString());

Se quiser manter o seu método dados faça:
System.out.println(funcionario.dados());

E, por favor, siga a convenção de nomes do Java. Nome de métodos começam com letras minúsculas, não maiúsculas.

M

Bom dia. Perfeito! Vlw a todos ai, ficou certinho…

abçs

Criado 13 de fevereiro de 2008
Ultima resposta 14 de fev. de 2008
Respostas 6
Participantes 5