Eu fiquei um pouco confuso em relação a utilização da composição. Basicamente você cria um ponteiro para outra classe para que seja possível acessar todos os valores dela através desse ponteiro que você criou. Então ao meu ver, resumidamente, você através do ponteiro "herda" todos os atributos da outra classe.
Exemplo:
public class Cliente {
String nome;
String cpf;
String profissao;
}
public class Conta{
double saldo;
int agencia;
int numero;
Cliente titular;
}
Conta contaDaMarcela = new Conta();
contaDaMarcela.titular = new Cliente();
contaDaMarcela.titular.nome = "Marcela";
Então é que vem minha dúvida. Não usamos a herança com a mesma finalidade? Pois utilizando a herança você alcança o mesmo propósito e ainda por cima a classe "filha" herda todos os atributos automaticamente, sem a necessidade de criar "setas". Em quais casos eu devo usar um e não o outro?
Obs: Ressalto que ainda sou consideravelmente novato, então se eu estiver falando asneiras, por favor explique melhor o conceito tanto de herança quanto de composição. Pode ser que eu não tenha compreendido muito bem.