Resumidamente, eu posso afirmar que na herança eu posso usar os atributos e métodos da classe "pai" e na composição também posso, então qual a verdadeira vantagem de usar composição em vez de herança?
Resumidamente, eu posso afirmar que na herança eu posso usar os atributos e métodos da classe "pai" e na composição também posso, então qual a verdadeira vantagem de usar composição em vez de herança?
Olá Tadeu, tudo bem?
Embora tanto a herança quanto a composição permitam que você acesse atributos e métodos de outras classes, a escolha entre elas depende do que você está tentando realizar em seu projeto.
A herança é útil quando você deseja criar uma classe que é uma versão especializada de outra classe. Por exemplo, se você tiver uma classe Animal e quiser criar uma classe Cachorro que herda os atributos e métodos da classe Animal, mas adiciona seus próprios atributos e métodos específicos para Cachorro, então a herança é a melhor escolha.
Já a composição é útil quando você deseja criar um objeto que contém outros objetos. Por exemplo, se você tiver uma classe Pessoa e quiser adicionar um endereço a essa pessoa, você poderia criar uma classe Endereço separada e, em seguida, compor a classe Pessoa com a classe Endereço. Dessa forma, a classe Pessoa teria um atributo que é uma instância da classe Endereço.
Ou seja, a herança é usada para criar uma relação "é um" entre as classes, enquanto a composição é usada para criar uma relação "tem um" entre as classes. A escolha entre elas depende do que você está tentando modelar em seu projeto e da relação que você deseja estabelecer entre as classes.
Excelente explicação @Otávio! Obrigado.