[quote]1-Na classe Programa como faço para chamar o set para acrescentar valor de nome ao titular sem modificar o set da classe Conta? Da mesma forma como imprimir sem mudar o get.
[/quote]
Bom, você refez a classe Conta, agora com os métodos get e set, e um campo titular (do tipo Cliente) agora como private.
Indicaria você a refazer também a classe Cliente com todos os campos private e com métodos get e set.
Mas considerando o modo como já está feito, para alterar (ou acrescentar) o nome do titular da maneira que está no programa você deve criar instanciar o objeto titular que está dentro do seu objeto minhaConta. Você faz isso utilizando o método get:
public class Programa {
public static void main (String [] args){
Conta minhaConta = new Conta();
/*Criando variável para instanciar o Cliente dentro da Conta:
getTitular irá retornar a instância do cliente existente dentro
do objeto minhaConta*/
Cliente clienteTemp = minhaConta.getTitular();
//Agora você pode utilizar a vontade o clienteTemp
clienteTemp.nome = "Nukem";
/*Ou se você modificar a classe Cliente e adicionar
um método para setar o nome, por exemplo: setNome(String nome)
ficaria assim:*/
//clienteTemp.setNome("Nukem");
/*Usando a mesmas intância clienteTemp, você pode imprimir
o nome do cliente, no exemplo abaixo, imprimindo diretamente:*/
System.out.println("Nome do Cliente: "+clienteTemp.nome);
/*E caso você crie um método get para o nome na classe Cliente,
com a assinatura:
public String getNome()
Ficaria assim:*/
//System.out.println("Nome do Cliente: "+ clienteTemp.getNome());
}
}
Não entendi muito bem a sua pergunta. Mas o ideal para POO seria você criar também métodos get e set dentro da classe Cliente para cada um dos campos, da mesma maneira que você fez para a classe Conta:
[code]public class Cliente {
private String nome;
private String sobrenome;
private String cpf;
public void setNome(String nomeCliente) {
this.nome = nomeCliente;
}
/*Note que neste método get o que será retornado é uma String,
no caso, o nome do cliente, por isso o tipo de retorno "String"*/
public String getNome() {
return this.nome;
}
public void setSobrenome(String sobreNomeCliente) {
this.sobrenome = sobreNomeCliente;
}
public String getSobrenome() {
return this.sobrenome;
}
//Fazer o mesmo para os demais campos...
}[/code]
A idéia seria a mesma do primeiro caso. Você consegue pegar o objeto Cliente que está dentro da sua conta (utilizando o método getTitular()). Através deste cliente você pode utilizar qualquer método de dentro da sua classe Cliente. Quando você não tinha colocado private você fazia de certa forma a mesma coisa, só que de uma maneira mais direta:
[code]//Você fazia assim:
minhaConta.titular.nome = “Duke Nukem”;
//Que seria mesma coisa de fazer assim:
Cliente clienteTemp = minhaConta.titular;
clienteTemp.nome = “Duke Nukem”;
/acessando minhaConta.titular você acessa o campo “titular” de dentro do objeto
minhaConta (que é do tipo Conta). Este objeto “titular” é do tipo Cliente, então agora
você utilizou um objeto intermediário para poder acessar o campo “nome” do seu
Cliente “titular”/
[/code]
Espero ter ajudado, se ainda tiver dúvidas poste novamente.