[Resolvido] Dúvida em Sobre-Escrita

5 respostas
G

O código é o seguinte:

package quiz;
// Define classe Pai ou SuperClasse
class Pai {
   protected int a = 5;
   public int exibir() {
         return a;
   }
}

// Define classe Filho ou Subclasse
// Mecanismo de heranca
public class Filho extends Pai {
   
    private int a = 1;

@Override
public int exibir() {
return a;
   }

public static void main(String[] args) {
Pai t = new Filho();
System.out.println(t.a);
System.out.println(t.exibir());
System.out.println( ((Filho)t ).a);
}
}

E as perguntas são:

  1. Por que o resultado do programa abaixo é ‘5,1,1’ e não ‘1,1,1’ ?
  2. O que explica tal resultado ?
  3. O que significa o comando da última linha da função main() ?

Gostaria que me ajudassem com essas 3 perguntas, se possível.

5 Respostas

remixlara

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.

jolivier

que surpresa você tem razao, é questao de herança

G

Grato amigos, agora estou entendendo melhor.

Criado 23 de maio de 2010
Ultima resposta 23 de mai. de 2010
Respostas 5
Participantes 3