Mais uma questão de exame!

opa, ja q a galera ta gostando, ai vai mais uma… hehehehe, qual será a saida do código abaixo?

package com.foo.p1;

public class Super {

   public int x = 420;

   protected int doStuff() 
   { 
      return x; 
   }

}
package com.foo.p2;

import com.foo.p1.Super;

public class Sub extends Super {

   public static void main( String [] args )
   {
      new Sub.callStuff();
   }

   void callStuff()
   {
      System.out.println( "this " + this.doStuff() );

      Super s = new Super();

      System.out.println( "super " + s.doStuff() );
   }

}

vai dar erro, ta usando o operador new pra uma chamada de metodo, acho q isso n pode… (alem do metodo nao estatico estar sendo chamado de forma erronea)…

se mudace pra:

new Sub().callStuff();

ateh q funcionaria…

afff, errei ao digitar… vai os parenteses sim, ai ta o código corrigido, agora sim… valendo… hehehehehe, qq vai da nesse código?

[code]package com.foo.p1;

public class Super {

public int x = 420;

protected int doStuff()
{
return x;
}

} [/code]

[code]package com.foo.p2;

import com.foo.p1.Super;

public class Sub extends Super {

public static void main( String [] args )
{
new Sub().callStuff();
}

void callStuff()
{
System.out.println( "this " + this.doStuff() );

  Super s = new Super(); 

  System.out.println( "super " + s.doStuff() ); 

}

} [/code]

vai dar erro…

pq em s.doStuff(), ta acecando por uma instancia… e ta como protected… n vai compilar…

Quando voce compilar ocorrera um erro, ao tentar acessar um membro private de uma classe por uma classe que nao seja do mesmo pacote ou por uma subclasse por heranca, voce tera um erro de compilacao.

:roll: private? … o exemplo ta usando protected :slight_smile: …usando private vai dar erro até se tu só imaginar q o atributo existe heaheahea

:roll: private? … o exemplo ta usando protected :slight_smile: …usando private vai dar erro até se tu só imaginar q o atributo existe heaheahea[/quote]

Vejam se eu estou certo, no final das contas vai dar erro na linha:

[code]System.out.println( "super " + s.doStuff() ); [/code

Pq o metodo doStuff() e do tipo protected, e somente pode ser chamando por classes que extendam a classe que tem este metodo.

Estou certo???{
Eu acho que também metodos protecteds podem ser chamados por classes do mesmo package, mesmo não extendendo a classe do metodo, estou certo em relação a esta afirmação?
}

certo! 8)

Assim como voce “errou” (se enganou) ao esquecer os parenteses eu tambem “errei”(me enganei) ao escrever private, onde voce ver private leia-se “protected”.

:roll: private? … o exemplo ta usando protected :slight_smile: …usando private vai dar erro até se tu só imaginar q o atributo existe heaheahea[/quote]

:joia:

meninas para que tanta hostilidade!!!