Ir para conteúdo

Arquivado

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

caezar

Herança - iniciante

Recommended Posts

Amigos!

Em meu exemplo de aprendizado estou tentando explorar ao máximo o capítulo de herança, mas ainda tenho uma duvida e peço a ajuda de vocês novamente:

Tenho as seguintes classes:

Conta

public class Conta {
int numero;
private double saldo;
private final double limite = 1500;
Cliente titular;

public Conta(int numero,double saldo, Cliente titular){
this.numero=numero;
this.saldo=saldo;
this.titular=titular;
Conta.totalDeContas++;
} 

Cliente

public class Cliente {
String nome;
char sexo;
int idade;

public Cliente(String nome,char sexo,int idade){
this.nome=nome;
this.sexo=sexo;
this.idade=idade;
}
}

Funcionario

public class Funcionario extends Cliente {

String nome;
String cpf;
double salario;

public Funcionario(String nome, char sexo,int idade, String cpf, double salario){
super(nome, sexo, idade);
this.nome=nome;
this.cpf=cpf;
this.salario=salario;

}

} 

FuncionarioTest

public class FuncionarioTest {

public static void main(String[] args) {

Conta c3 = new Conta("11658",15000,new Funcionario("Ana",'F',26,"1998765",2000));

}

} 

Agora a dúvida:

Se todo funcionário é um cliente, como posso imprimir o valor, por exemplo, do salario que esta na classe funcionários? Tentei desta forma, mas não é possivel:

System.out.println("Caro sra." + c3.titular.nome + c3.titular.salario);

 

Qual seria a melhor forma de atribuir uma conta a funcionário neste caso?

Parece um erro bobo mas estou aprendendo! rsss

Muito Obrigado novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na classe conta, é necessário criar um método construtor para aceitar um cliente, e outro para um funcionário. Eu reescrevi todo o seu código, incluindo métodos de acesso e alteração (getters and setters) para os atributos. Caso o que eu tenha feito aparente ser magia negra, adicione-me no Facebook e explico melhor (O link está no meu perfil).

Conta:

package example;

public class Conta {

	private int número;
	private double saldo;
	private final double limite = 1500.00;
	private Cliente clienteTitular;
	private Funcionário funcionárioTitular;
	
	// Método construtor para Cliente.
	
	public Conta(int número, double saldo, Cliente titular) {
		
		this.número = número;
		this.saldo = saldo;
		this.clienteTitular = titular;
		
	}
	
	// Método construtor para Funcionário.
	// Note que as assinaturas são diferentes, se passar um Funcionário para o construtor da classe conta, este é o que será utilizado.
	
	public Conta(int número, double saldo, Funcionário titular) {
		
		this.número = número;
		this.saldo = saldo;
		this.funcionárioTitular = titular;
		
	}

	public int acessarNúmero() { return this.número; }
	public double acessarSaldo() { return this.saldo; }
	public double acessarLimite() { return limite; }
	public Cliente acessarCliente() { return this.clienteTitular; }
	public Funcionário acessarFuncionário() { return this.funcionárioTitular; }
	
	public void alterarNúmero(int novoNúmero) {
		
		this.número = novoNúmero;
		
	}
	
	public void alterarSaldo(double novoSaldo) {
		
		this.saldo = novoSaldo;
		
	}
	
	public void alterarTitular(Cliente novoTitular) {
		
		this.clienteTitular = novoTitular;
		
	}
	
	public void alterarTitular(Funcionário novoTitular) {
		
		this.funcionárioTitular = novoTitular;
		
	}
	
}

Cliente:

package example;

public class Cliente {

	private String nome;
	private char sexo;
	private int idade;
	
	public Cliente(String nome, char sexo, int idade) {
		
		this.nome = nome;
		this.sexo = sexo;
		this.idade = idade;
		
	}
	
	public String acessarNome() { return this.nome; }
	public char acessarSexo() { return this.sexo; }
	public int acessarIdade() { return this.idade; }
	
	public void alterarNome(String novoNome) {
		
		this.nome = novoNome;
		
	}
	
	public void alterarSexo(char novoSexo) {
		
		this.sexo = novoSexo;
		
	}
	
	public void alterarIdade(int novaIdade) {
		
		this.idade = novaIdade;
		
	}
	
}

Funcionário:

package example;

public class Funcionário extends Cliente {

	private String CPF;
	private double salário;
	
	public Funcionário(String nome, char sexo, int idade) {
		
		super(nome, sexo, idade); // Adiciona ao construtor da superclasse: Cliente.
		
	}
	
	// Sobrecarga de método construtor. Espaços de nome iguais, mas assinaturas (Argumentos) diferentes.
	// Se CPF e Salário forem adicionados ao construtor da classe Funcionário, este é o método que será chamado no lugar.
	
	public Funcionário(String nome, char sexo, int idade, String CPF, double salário) {
		
		super(nome, sexo, idade); // Adiciona ao construtor da superclasse: Cliente.
		this.CPF = CPF;
		this.salário = salário;
		
	}
	
	public String acessarCPF() { return this.CPF; }
	public double acessarSalário() { return this.salário; }

	public void alterarCPF(String novoCPF) {
		
		this.CPF = novoCPF;
		
	}
	
	public void alterarSalário(double novoSalário) {
		
		this.salário = novoSalário;
		
	}
	
}

Main:

package example;

public class Main {

	public static void main(String[] args) {

		Conta c3 = new Conta(11658, 15000.00, new Funcionário("Ana", 'F', 26, "1998765", 2000.00));
		
		if (c3.acessarFuncionário().acessarSexo() == 'M') {
			
			System.out.println("Caro... String no caso de o cliente ser homem.");
			
		} else if (c3.acessarFuncionário().acessarSexo() == 'F') {
			
			System.out.println("Cara Sra. " + c3.acessarFuncionário().acessarNome() + ", " + c3.acessarFuncionário().acessarSalário());
			
		}
		
	}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros obrigado.

Com a ajuda de vocês entendi. Na verdade funcionário herda de cliente mas obviamente o inverso não acontece. Com o exemplo do Ericson ficou bem exposto como trabalhar com os clientes e funcionários. Caso seja um funcionário ele obrigatoriamente sera um cliente mas ser um cliente não implica ser um funcionário, por isso o mais correto é add o atributo cpf em cliente pois assim funcionário tb herda.

 

Obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas nesse caso o cliente nao ficaria sem cpf nao!?! ja q soh tem atributo CPF na classe funcionario, e nem todo cliente eh funcionario, deveria ser ao contrario nao?! tirar esse cpf da classe funcionario e colocar na classe cliente, ja q tanto cliente como funcionario tem cpf, mas nem todo cliente eh funcionario?! duvida de novinho galera, desculpe se estou errado

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.