Encapsulamento e atribuição de valores

Tenho uma questão. Simulando uma aplicação de um banco em uns exercícios de encapsulamento, tenho as classes Cliente, Conta e a Teste Conta. Preciso imprimir um atributo protegido da classe cliente, chamando um método da classe Conta dentro da classe Teste conta. Quando tento, imprime sempre “null”, mesmo tendo inicializado a variável na classe Teste conta e atribuído o conteúdo dela à uma variável da classe conta.

Observação: caso tenha uma solução mais enxuta, até prefiro, obrigada.

Segue o código pra tentar explicar melhor:

public class Cliente {
	
	private String nome, sobrenome, cpf;
	
	Cliente(String nomeConta, String sobrenomeConta, String cpfConta)
        {		
		nome = nomeConta;
		sobrenome = sobrenomeConta;
		cpf = cpfConta;	
	}	
	public String getDadosCliente(){
		String dadosCliente = "\nTitular: " + nome;
		dadosCliente += "\nSobrenome: " + sobrenome;
		dadosCliente += "\nCPF: " + cpf;
		return dadosCliente;
	}		
}

public class Conta
{

	int numero;
	String nomeConta, sobrenomeConta, cpfConta;		
	Conta(String nomeCliente, String sobrenomeCliente, String cpfCliente)
        {		
		nomeConta = nomeCliente;
		sobrenomeConta = sobrenomeCliente;
		cpfConta = cpfCliente;		
	}
	
	Cliente titular = new Cliente(nomeConta, sobrenomeConta, cpfConta);	
		
	String agencia;
	double saldo;
	Data dataAbertura = new Data();
	
	
	void saca(double vrSaque)
        {
		saldo -= vrSaque;
	}

	void deposita(double vrDeposito){
		saldo += vrDeposito;
	}
	
	double calculaRendimento(){
		double rendimento = saldo * 0.1;
		return rendimento;
	}
	
	void transfere (Conta destino, double valor){
		this.saldo -= valor;
		destino.saldo += valor;
	}
	
	String recuperarDadosParaImpressao(){
		String dados = titular.getDadosCliente();
		dados += "\nConta: " + numero;
		dados += "\nAgência: " + agencia;
		dados += "\nO saldo da conta é: R$" + saldo;
		dados += "\nCliente desde: " + dataAbertura.formataData(dataAbertura.dia, dataAbertura.mes, dataAbertura.ano);
		return dados;
	}
}

public class TesteConta
{

	public static void main(String[] args){
			
		String nomeCliente = "Bianca";
		String sobrenomeCliente = "Nunes";
		String cpfCliente = "07881458976";		
		
		Conta c1 = new Conta(nomeCliente, sobrenomeCliente, cpfCliente);
		
		c1.numero = 4545;
		c1.agencia = "2303";
		c1.saldo = 800;
		c1.dataAbertura.dia = 5;		
		c1.dataAbertura.mes = 7;
		c1.dataAbertura.ano = 2010;

		System.out.println(c1.recuperarDadosParaImpressao());

	}
}

É só inicializar os atributos dentro do construtor:

public class Conta {

 int numero;
 String nomeConta, sobrenomeConta, cpfConta;
 Cliente titular;
 String agencia;
 double saldo;
 Data dataAbertura;

 Conta(String nomeCliente, String sobrenomeCliente, String cpfCliente) {
  nomeConta = nomeCliente;
  sobrenomeConta = sobrenomeCliente;
  cpfConta = cpfCliente;
  titular = new Cliente(nomeConta, sobrenomeConta, cpfConta);
  dataAbertura = new Data();
 }

Observe que o nome da conta e do cliente são os mesmos valores, o mesmo se repete com o sobrenome e cpf, se sempre serão iguais, então poderia ser simplificado:

public class Conta {

 int numero;
 // String nomeConta, sobrenomeConta, cpfConta;
 Cliente titular;
 String agencia;
 double saldo;
 Data dataAbertura;

 Conta(String nomeCliente, String sobrenomeCliente, String cpfCliente) {
  // nomeConta = nomeCliente;
  // sobrenomeConta = sobrenomeCliente;
  // cpfConta = cpfCliente;
  titular = new Cliente(nomeCliente, sobrenomeCliente, cpfCliente);
  dataAbertura = new Data();
 }

Perfeito!

Obrigada diego12!!!