se não estou enganado
pois a primeira linha em qualquer construtor é a chamada ao contrutor do ancestral, depois roda o codigo do construtor
e é impresso -1 em vez de 99, pois a variavel i impressa é a da classe derived, ja que a da classe base foi “escondida” por esta, e a variavel b aponta para uma instancia da classe Derived
e por fim, é chamado o metodo amethod da classe derived, novamente por que é uma instancia desta classe que esta contida na variavel b, mesmo esta variavel sendo do tipo Base
C
chicoria
Derived.amethod()constructor-1Derived.amethod()
sequência da construção do objeto:
-construtor da Derived
–construtor da Base
—executa o construtor da Object
–executa o resto do construtor da Base
-executa o resto do construtor da Derived
O método amethod() no construtor da Base invoca o método sobrescrito na subclasse.(Virtual Method Invocation - VMI)
System.out.println(b.i); //imprime o valor do atributo i da classe Derived
b.amethod(); idem ao amethod() anterior - VMI
urubatan
que chato, errei feio,
o output copiado do console
Derived.amethod()constructor99Derived.amethod()
esqueci do polimorfismo na primeira chamada a amethod (no construtor de Base)
e ainda não entendi por que o 99, achei que a variavel de Derived deveria esconder a de Base
L
leo.dep
imprime 99 pq b é uma referencia do tipo Base e nao da subclasse…
e variaveis de instancia como i agem diferentes dos metodos…
se eu estiver errado por favor me corijam…
Hempx
porra…
alguem sabe uma explicacao melhor para esse…
porque nao entendi naum… inda mais esse 99…
S
Solum
imprime 99, pq a referencia eh pra classe Base. Ai imprime 99
em relacao ao Derived, pq o metodo foi reescrito