Olá Renata, tudo bem?
Entendo que a Orientação a Objetos pode ser um pouco confusa no começo, mas vamos esclarecer suas dúvidas.
Primeiramente, a diferença entre nome
e titular
é que nome
é um atributo da classe Cliente
, referindo-se ao nome do cliente, enquanto titular
é um atributo da classe Conta
, que é uma referência a um objeto do tipo Cliente
. Ou seja, titular
não é uma String, mas sim um objeto Cliente
.
Quanto à sua dúvida sobre o uso de extends
, é importante ressaltar que extends
é utilizado para representar uma relação de herança entre classes, ou seja, quando uma classe é uma subclasse de outra. No caso apresentado, Cliente
e Conta
são classes distintas e não possuem uma relação de herança entre si.
O que acontece aqui é uma relação de composição: uma Conta
possui um Cliente
como titular. Por isso, em vez de usar extends
, nós definimos Cliente
como o tipo do atributo titular
na classe Conta
. Isso significa que cada Conta
terá uma referência a um objeto Cliente
, que será o titular da conta.
Por exemplo, quando fazemos:
Cliente paulo = new Cliente();
paulo.nome = "Paulo Silveira";
paulo.cpf = "222.222.222-22";
paulo.profissao = "programador";
Conta contaDoPaulo = new Conta();
contaDoPaulo.deposita(100);
contaDoPaulo.titular = paulo;
Estamos criando um novo Cliente
chamado paulo
e uma nova Conta
chamada contaDoPaulo
. Em seguida, estamos dizendo que o titular
da contaDoPaulo
é o Cliente
paulo
. Ou seja, estamos associando o Cliente
paulo
à Conta
contaDoPaulo
.
Espero ter ajudado e bons estudos!