Isso tem haver com a forma como vc acessa o atributo a do objeto test.
Declaraste test como sendo da classe Test, logo se vc acessar o atributo 'a', vais acessar o atributo definido na classe Test.
Faça o seguinte teste
System.out.print(((Test2)test).a);
Terás uma surpresa. Agora usar estas letras dificulta o aprendizado: coloque algo legivel no lugar de 'a' ;-)
andrepestana
Valeu, peczenyj!
Essa prova tá me deixando louco… Na verdade não tem nada a ver com static. Fiz um exemplo melhor que esclareceu minhas dúvidas:
publicclassMemberTest{publicstaticvoidmain(String[]args){Fatherf1=newSon1();Fatherf2=newSon2();System.out.println(f1.member);System.out.println(f1.getMember());System.out.println(f2.member);System.out.println(f2.getMember());}}classFather{Stringmember="father";publicStringgetMember(){returnmember;}}classSon1extendsFather{Stringmember="son1";publicStringgetMember(){returnmember;}}classSon2extendsFather{Stringmember="son2";// não implementa getMember!}
Abraço,
sergiotaborda
andrepestana:
Pessoal…
Surgiu uma dúvida quanto a static classes. Pq o resultado desse código abaixo é ‘A b’?
Na verdade nada têm a haver com static class e sim com o conceito de escopo.
Isso é comum em prova de certificação. O codigo é complicados com detahes superfulos só para desviar a atenção do que realmente importa.
jaboot
André,
Esse assunto é meio complexo mesmo… o pessoal estava conversando sobre isso, neste fórum de certificação esses dias:
Eu já até tinha visto o post mas obrigado pela atenção. O problema é que quando vc faz muitos simulados com pegadinhas vc chega num estado que não sabe mais o que é certo e o que é errado.
Quanto aos métodos eu lembrava que o polimorfismo iria chamar o método da classe filha, mas não lembrava mais o comportamento da chamada do membro subscrito pela referência do pai. Já tava pensando que iria chamar o membro subscrito do filho… loucura!
Apesar desta dúvida besta estou tirando entre 70% e 80% nos simulados TestKiller e oficial da Sun. Espero ir bem na prova.