Dúvida para atribuir valor a um atributo do tipo String

Olá,

É a primeira vez que publico no fórum, portanto, caso esteja fazendo algo errado, corrijam-me. Sou uma curiosa em Java, ainda tenho dificuldades com os termos usados (corrijam isto também, se necessário), e estou iniciando meus estudos agora com a apostila da Caelum.

Minha dúvida: tenho uma classe Conta e uma Cliente. Na classe Cliente tenho os seguintes atributos:

public class Cliente {

String nome;
String sobrenome;
String cpf;

Já na minha classe Conta, tenho:

public class Conta {

int numeroConta;
String agencia;
private double saldo; 
Data dataAbertura;
String titular; 

Porém, no meu atributo titular, eu gostaria que fossem usados os valores dos atributos “nome” + “sobrenome”, é possível? Sendo possível, é recomendável ou teria uma melhor prática para fazê-lo? Obrigada!

Seu atributo titular deveria ser do tipo Cliente e não do tipo String.

1 curtida

Obrigada pela rapidez na resposta, vou tentar da forma como você falou.

Só para deixar o resultado, caso alguém queira saber também (ou sugerir alguma outra forma), criei o titular do tipo Cliente:

public class Conta {

int numeroConta;
String agencia;
private double saldo; //quero inicializar o saldo apenas pelo deposita, como fazer?
Data dataAbertura;
Cliente titular= new Cliente();

e criei um método na classe Cliente que retorna o nome e o sobrenome:

public class Cliente {

String nome;
String sobrenome;
String cpf;

public String titularConta(){
    return nome + " " + sobrenome;

}

Correção: meu método não adiantou nada para o que eu queria. Na verdade, criar Cliente titular, tornou possível que eu referenciasse uma conta a um cliente específico, podendo acessá-lo através do .titular, aí consegui imprimir usando titular.nome + titular.sobrenome, desculpem a confusão.

Obrigada, staroski!

private double saldo = 0; :face_with_raised_eyebrow:

Rodrigo, o comentário foi sem querer, mas obrigada, já tirou minha dúvida, rs, vou fazer isso.:wink:

1 curtida

Neste mesmo caso, o titular aceita que tipo de valor? Por exemplo, se eu criar um construtor:

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

e quiser atribuir um valor ao argumento do construtor, o que devo usar? Coloquei uma String “Maria”, mas dá um erro:

Error:(48, 30) java: incompatible types: java.lang.String cannot be converted to com.company.Cliente.

Há algum valor válido que eu possa passar nesse caso? O que estou fazendo quando eu coloco o argumento Cliente titular no meu construtor? Obrigada.

O parametro é do tipo Cliente, logo você tem que passar um objeto cliente

Cliente titular = new Cliente();
titular.nome = "Maria";
//outros atributos

Conta conta = new Conta(titular);

//Para saber o nome do titular da conta
System.out.println(conta.titular.nome);

Esse método deveria pertencer a classe Conta e deveria retornar o objeto do tipo Cliente.

Deve usar um parâmetro do tipo Cliente e esse parâmetro você utiliza para inicializar o atributo titular.
Você não deve fazer new Titular dentro da classe Conta.

Mike, obrigada pela resposta, mas acho que não fui muito clara. Eu consigo fazer essa parte que você mencionou:

Cliente titular = new Cliente();
titular.nome = “Maria”;
//outros atributos

O problema é que eu queria criar a conta e já atribuir um valor ao argumento Cliente titular do construtor, foi nesse momento que deu o erro.

Mas vou tentar fazer pensando no que o staroski indicou. Caso eu não tenha entendido o que você quis dizer, desculpa.

Eu estava fazendo uma grande confusão, usando um construtor Conta na classe Cliente, nunca ia dar certo, mas agora as coisas começaram a ficar um pouco mais claras.

Entendi o que você disse sobre o construtor, eu peguei um cliente e atribuí ao atributo titular e consegui entender o que eu estava fazendo, obrigada.

Já percebi que você gosta de fazer a gente pensar ao invés de dar a resposta pronta, isso é ótimo, fico quebrando a cabeça até entender o que você disse e fazer certo, mas tem hora que não saio do outro lado.

Quando você diz “Esse método deveria pertencer a classe Conta e deveria retornar o objeto do tipo Cliente.”, isso quer dizer que eu tenho de criar um outro atributo do tipo Cliente, certo? Minha classe Cliente hoje está assim:

public class Cliente {

String nome;
String sobrenome;
String cpf;

public void mudaCPF(String cpf){
    validaCPF(cpf);
    this.cpf = cpf;
}

private void validaCPF(String cpf){

}

Esse método ficando na classe Conta e retornando esse objeto serviria para quê? Inicialmente, eu queria que a variável titular retornasse o nome + sobrenome do cliente, mas eu estava errada, titular é apenas uma forma de referenciar a conta a um cliente, correto? Dessa forma eu ainda preciso desse método?

Não, como você declarou um Cliente dentro de Conta, esse cliente está atrelado a essa conta e você vai conseguir acessa-lo através dessa conta, dito isso, ele se torna um atributo de conta, como agencia ou saldo e da mesma forma que você fez para chamar esses atributos da conta, você deve fazer com o atributo cliente.

Por exemplo:

class Conta {
Cliente x;

public Cliente retornaCliente() {
return x;
}