[RESOLVIDO] Atribuições Construtores

Eu tenho uma classe onde eu tenho um atributo de uma outra classe, e no caso eu to declarando um construtor onde obrigatoriamente eu tenho que passar um objeto dessa outra classe como parametro, então eu estou fazendo os apontamentos necessários. eu só queria saber se os apontamentos que eu estou fazendo estão corretos ou se há uma outra maneira mais elegante de se fazer isso ( sou iniciante ainda).

identar texto pre-formatado em 4 espaços

public class Cliente {

private String nome;
private String sobrenome;
private String cpf;
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getSobrenome() {
	return sobrenome;
}
public void setSobrenome(String sobrenome) {
	this.sobrenome = sobrenome;
}
public String getCpf() {
	return cpf;
}
public void setCpf(String cpf) {
	this.cpf = cpf;
}

}

identar texto pre-formatado em 4 espaços

public class Conta {

private int numero;
private double saldo;
private double limite;
private Cliente titular;

public Conta(Cliente a) {
	this.titular.setNome(a.getNome()); 
	this.titular.setCpf(a.getCpf());
	this.titular.setSobrenome(a.getSobrenome());
}

Normalmente se usa getters/setters nessa ocasião.

public void setTitular(Cliente titular){ this.titular = titular; }

Nada te impede de passar pelo construtor também.

public Conta(Cliente a){ this.titular = a; }

Eu acho mais elegante usar o nome do objeto igual o da classe, fica mais facil o entendimento de quem esta olhando o código, então eu trocaria o titular por cliente;

Ah não tinha pensado nesse 1 exemplo q vc deu. no caso por exemplo, tanto no exemplo do set quanto no do construtor, quando eu digo “this.titular = titular” eu já faço esse atributo titular apontar para os atributos da classe Cliente diretamente?se sim, no caso então, o exemplo em q eu fui setando um por um fica meio repetitivo né

Sim, você não precisa fazer:

this.titular.setNome(a.getNome());
this.titular.setCpf(a.getCpf());
this.titular.setSobrenome(a.getSobrenome());

basta apenas:

No código acima, esta dizendo que o seu objeto titular vai ter os dados do objeto passado como parâmetro, que no caso é o ‘a’.

Se o objeto do parâmetro tiver o nome André, o seu objeto titular vai automaticamente ter o nome André também, por que você esta falando que ‘titular’ é igual ao objeto ‘a’, logo os dois terão os mesmos nomes, cpf, sobrenome, etc.

1 curtida

Valeu pelo esclarecimento, mano.

1 curtida

Tamo junto, se a dúvida foi respondida, por favor atribua a solução e coloca [RESOLVIDO] no tópico para ajudar quem estiver com a mesma dúvida :slight_smile:

uma última coisa só, eu apliquei aqui o exemplo q vc fez, setando o atributo ao objeto, mas aqui quando eu setei e fui printar no console o valor setado, deu null pointer exception.

identar texto pre-formatado em 4 espaços

public class Motor {

private int potencia;
private String tipo;

}

identar texto pre-formatado em 4 espaços

public class Carro {

private String cor;
private String modelo;
private double velocidadeAtual;
private double velocidadeMaxima;
private Motor motor;

public void setMotor(Motor motor) {
	this.motor = motor;
}

public Motor getMotor() {
	return motor;
}

identar texto pre-formatado em 4 espaços

public class TesteCarro {

public static void main(String[] args) {
	
	Carro carro1 = new Carro();
	Motor motor1 = new Motor();
	
	motor1.setPotencia(500);
	motor1.setTipo("v8");

System.out.println(carro1.getMotor().getPotencia());
System.out.println(carro1.getMotor().getTipo());

Você criou dois objetos, carro1 e motor1, mas não atribuiu o motor ao carro, faltou só uma linha de código.

Você esta querendo acessar a potencia do motor, sem ter dado um motor ao carro

eu tinha achado q quando eu fiz o set apontando o atributo motor pra o objeto motor esse problema tinha sido resolvido, mas ok.

É a mesma coisa de quando você quer dar uma potencia para o motor

Só que ali você também precisa dar um motor a um carro

Não é possível acessar o motor do carro, sem ter dado um a ele

entendi. tenho q praticar mais exemplos desse tipo. valeu, cara.