chama o construtor de B sim, porque A é subclasse de B.
(regra de chamada autoatica de construtores dos pais)
[quote=fmeyer]
quando vc tem uma variavel nao instanciada o for simplismente nao é executado … no primeiro teste ele nao faz nada … por isso nao imprime nada … [/quote]
a variavel nao eh null
ela eh um array de tamanho 0!
tmb acho.
a primeira linha de todo construtor é uma chamada a super da classe pai. como foi definido um construtor com parametros na classe B, o compilador não vai inserir o construtor default em B e na chamada do construtor de A o compilador vai tentar inserir uma chamada ao construtor default de B pq não foi inserida nenhuma. ficou complicado?
[quote=danieldestro]Mas não tem a parada de chama implicita de super() no construtor de A?
Teria que dar pau.[/quote]
realmente… pensando no q o luca escreveu (mesmo ao telefone) concluimos que um construtor com varargs assume a chamada a super() pra ele e por isso que fica com array de tamanho 0.
entendi o lance do array de tamanho 0 (pq o super() foi chamado logico) mas tbm acho q deveria dar algum tipo de erro aqui… o compilador nao poderia colocar a chamada a super() às cegas, sem saber se vai chamar o default ou outro… sei la
Olhem o que está escrito no livro da Kathy Sierra:
Se sua superclasse não tiver um construtor sem argumentos, você terá que criar um construtor a inserir uma chamada a super() que coincidam com os do construtor da superclasse.
[quote=JLS 3.0 15.1.4.2]
If the method being invoked is a variable arity method (§8.4.1) m, it necessarily has formal parameters. The final formal parameter of m necessarily has type T[] for some T, and m is necessarily being invoked with actual argument expressions.[/quote]
[quote=danieldestro]Mas não tem a parada de chama implicita de super() no construtor de A?
Teria que dar pau.[/quote]
[quote=JLS 3.0 8.8.7]
If a constructor body does not begin with an explicit constructor invocation and the constructor being declared is not part of the primordial class Object, then the constructor body is implicitly assumed by the compiler to begin with a super class constructor invocation “super();”, an invocation of the constructor of its direct superclass that takes no arguments.[/quote]
O construtor B(int…barr) é um construtor da super classe com zero ou mais argumentos e assim foi chamado com zero argumentos.
Lição desta pegadinha: Cuidado com construtores usando varargs!
Mas isto é coisa que só existe no teste da Sun…hehehe
É isso que o Luca disse mesmo. Eu lembro de ter visto isso em uma matéria da MJ com o Paulo Silveira sobre a nova certificação 1.5. Lá ele comenta algo sobre isso mesmo.