packagequiz;// Define classe Pai ou SuperClasseclassPai{protectedinta=5;publicintexibir(){returna;}}// Define classe Filho ou Subclasse// Mecanismo de herancapublicclassFilhoextendsPai{privateinta=1;@Overridepublicintexibir(){returna;}publicstaticvoidmain(String[]args){Pait=newFilho();System.out.println(t.a);System.out.println(t.exibir());System.out.println(((Filho)t).a);}}
E as perguntas são:
Por que o resultado do programa abaixo é ‘5,1,1’ e não ‘1,1,1’ ?
O que explica tal resultado ?
O que significa o comando da última linha da função main() ?
Gostaria que me ajudassem com essas 3 perguntas, se possível.
Primeiramente este código semânticamente está errado. Quando você estende uma classe você está querendo dizer “é um”. Neste codigo ele está dizendo Filho é um Pai.
Quando você cria o Atributo t que é do tipo Pai porém é instanciado como Filho você apenas possuirá acesso aos métodos e atributos da classe Pai.
Logo o primeiro System.out é 5 por este motivo.
Já o método exibir no segundo System.out será chamado da classe Pai também, mas ele foi sobrescrito exibindo o atributo ‘a’ do objeto instanciado Filho.
No terceiro System.out ele está fazendo um Casting Explicito, ou seja, está forçando a conversão de um objeto. Quando você faz isso você está acessando o objeto da classe Pai porém sobrescrito pela classe Filho exibindo o valor da classe Filho sendo que o objeto acessado é da classe Pai por ele não ser privado.
espero que tenha entendido. =D
jolivier
Bom dia remixlara
A questão do problema e mais simples do que a explicação do nosso colega descreve acima.
a resolução e: A variável t faz uma referencia ao objeto filho criado na memória
mais sendo assim porque t.a aparece o valor 5.? elementar meu caro e só questão de acesso
na classe filho o atributo a e privado na classe pai e protegido, não tem como acessar atributo privado.
remixlara
jolivier:
Bom dia remixlara
A questão do problema e mais simples do que a explicação do nosso colega descreve acima.
a resolução e: A variável t faz uma referencia ao objeto filho criado na memória
mais sendo assim porque t.a aparece o valor 5.? elementar meu caro e só questão de acesso
na classe filho o atributo a e privado na classe pai e protegido, não tem como acessar atributo privado.
Isso não é questão de acesso, pois mesmo você colocando o atributo ‘a’ da classe Filho como public você irá acessar o atributo ‘a’ da classe Pai pois o Objeto é do Tipo Pai e não filho, mesmo ele sendo Instânciado como Filho. isso é questão de herança.