Dpuvida com pergunta do ExamLab

7 respostas
brunorota

Olá galera

Não entendi o porque dessa saída nessa pergunta

public class Greek{

     int i=1;

     public int getI(){
          System.out.print("Super");
          return i;
     }

     public static void main(String arhs[]){
          Greek ga=new Arabik();
         
          System.out.print(ga.i+" "+ga.getI());
     }
}


class Arabik extends Greek{

     int i=2;

     public int getI(){
          System.out.print("Sub");
          return i;
     }

}

A saída é Sub1 2

Mais porque é Sub1 2

Se o ga.i vem antes do método o0

Alguem ae pode me explicar?

Valew

7 Respostas

luiz.portnoy

Bom, ga.i vai acessar a própria classe Greek. ga.getI() vai acessar da classe que foi determinado tipo. Como foi feito new Arabic(), então ele vai no metodo getI() de Arabic.

evertonsilvagomesjav
brunorota:
Olá galera Não entendi o porque dessa saída nessa pergunta
public class Greek{

     int i=1;

     public int getI(){
          System.out.print("Super");
          return i;
     }

     public static void main(String arhs[]){
          Greek ga=new Arabik();
         
          System.out.print(ga.i+" "+ga.getI());
     }
}


class Arabik extends Greek{

     int i=2;

     public int getI(){
          System.out.print("Sub");
          return i;
     }

}

A saída é Sub1 2

Mais porque é Sub1 2

Se o ga.i vem antes do método o0

Alguem ae pode me explicar?

Valew

Entao, neste exemplo esta havendo polimorfismo entao quando vc faz:

Greek ga=new Arabik();   
           
          System.out.print(ga.i+" "+ga.getI());

ga.i ele exibe na tela o atributo "i" de Greek porque nao ocorre polimorfismo com variaveis e quando vc faz ga.getI() como vc sobreescreveu o método em Arabik ele chama este método sobreescrito, por isso tem esta saida.

brunorota

humm

Mais minha duvida eh pq aparece primeiro o numero e soh depois o Sub entendeu?

Sendo a na chamda System.out.print está primeiro o ga.i que aki imprimiria o numero e depois chama o metodo que imprime a String e depois o numero

System.out.println(ga.i + " " + ga.getI());

Nao é soh na cahmada do método que ia ter q imprimir a String Sub

O resultado ele imprimi primeiro a String e soh depois os numeros

Eh com isso q eu to encafifado ihau

evertonsilvagomesjav

brunorota:
humm

Mais minha duvida eh pq aparece primeiro o numero e soh depois o Sub entendeu?

Sendo a na chamda System.out.print está primeiro o ga.i que aki imprimiria o numero e depois chama o metodo que imprime a String e depois o numero

System.out.println(ga.i + " " + ga.getI());

Nao é soh na cahmada do método que ia ter q imprimir a String Sub

O resultado ele imprimi primeiro a String e soh depois os numeros

Eh com isso q eu to encafifado ihau

Pelo que to vendo a saida tem que ser 1 Sub2

luiz_renato

Olha,

Se estiver errado , a gelara me corrija por favor pois tbm estou estudando …

Me parece na concatenação ga.i + " " + ga.getI() ga.get() imprime Sub antes de retornar o valor de i e após isso a concatenação é feita, fazendo com que Sub seja impresso antes de ga.i

Luiz Renato

luiz.portnoy

Bom, debuguei isso umas trocentas vezes. Aí, me liguei em uma coisa: a ordem de execução de uma função é primeiro chamar uma função. Assim sendo, quando chamamos System.out.print(), dentro dessa função é verificado a existencia primeiro de outra função. E realmente tem que é a função getI(). Como essa função dentro dela tem um System.out.print() e ele não quebra linhas, então ele imprime Sub, devolve o valor pra função que chamou (System.out.print()), ai sim, é executada a ordem normal.

Complicado mas acho que é assim que funciona.

Espero ter ajudado

brunorota

Vdd

Pode ser isso mesmo

Só que eu não sabia pra mim era por ordem, independente se é função ou não

Vou fazer testes aqui pra ter ctz

Valew

Criado 1 de junho de 2010
Ultima resposta 2 de jun. de 2010
Respostas 7
Participantes 4