Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no Ex. 40 da Aula 6 - Escrevendo Menos Código com Templates

Pessoal, alguém saberia me explicar qual diferença faz (na classe PessoaFisica) entre simplesmente declarar o atributo dadosPessoais e instanciá-lo na declaração:

private DadosPessoais dadosPessoais;

ou

private DadosPessoais dadosPessoais = new DadosPessoais();

Qual dois dois casos devo usar no exercício e por quê?

Inicialmente pensei em usar o segundo caso pois nos métodos da Classe eu irei fazer com que o atributo dadosPessoais invoque métodos como o setNome() por exemplo. Logo eu precisaria que houvesse um objeto dadosPessoais instanciado e atribuído a esta variável de antemão, mas pelo resposta do exercício isso não é necessário.

É uma dúvida meio básica, mas empaquei nela.

3 respostas

Bruno, Bom dia !

no caso desse exercício , o segundo caso é melhor .

é a proposta do exercício é criar um composição para os dadosPessoais e assim poder utilizar todos métodos da classe .

onde em alguns casos é melhor ter a composição do que a herança .

leia este post escrito pelo Paulo Silveira no blog da caelum .

Leia Mais

onde fala sobre composição e Herança .

Espero ter ajudado .

Bom dia, Celso.

Li o artigo. Mas ainda não entendi a diferença entre simplesmente declarar um atributo e declarar ao mesmo tempo que inicializo o atributo.

Ambos os casos parecem funcionar, mas qual a diferença "por de baixo dos panos"?

Entendi o porquê e quando devo usar composição ao invés de herança. Mas como ela funciona internamente? Em outras palavras:

Cada objeto da classe que contem um atributo de outra, ao ser instanciado já possui automaticamente uma referência para esse outro objeto? Como se esse outro objeto não foi instanciado? Ou será que ao instanciar um objeto de uma classe que contém um atributo do tipo de outra classe , o java automaticamente e internamente instancia um objeto do tipo contido para que o objeto contentor possa ter uma referência?

Apesar despeito da minha dúvida, acredito que nesse caso seria mais elegante e correto instanciar o atributo de outro tipo no construtor do objeto contentor. Assim, ao criar um objeto contentor automaticamente teremos um objeto contido.

solução!

Bruno ,

a maneira que irá utilizar , depende muito do contexto do seu sistema . você pode apenas declarar .

e quando realmente precisar você cria o objeto da classe . agora se você for utilizar logo de cara as informações você pode declarar e ja criar o objeto .

é uma boa ideia colocar no construtor a criação do objeto isso se realmente for utilizar as informações agora . porém tem que analisar se irá criar um objeto desnecessário , se toda vez instanciar essa classe ,

é tudo uma questão de jeito , de analise para utilizar o melhor tipo sabe .

espero ter te ajudado .