Questaozinha

10 respostas
S

What is the output of the following program when you compile and execute it? Assume classes are defined in the same package

1.  class Phone {
2.     static String device = "Phone.device";
3.     void showDevice() {
4.        System.out.print("Phone.showDevice," + device + " ");
5.     }
6.     Phone() {
7.        showDevice();
8.     }
9.  }

1.  class Mobile extends Phone {
2.     String device = "Mobile.device";
3.     void showDevice() {
4.        System.out.print("Mobile.showDevice," + device + " ");
5.     }
6.     Mobile() {
7.        showDevice();
8.     }
9.     public static void main(String[] args) {
10.      Mobile n = new Mobile();
11.      n.showDevice();
12.   }
13. }

A - Mobile.showDevice,Mobile.device Mobile.showDevice,Mobile.device Mobile.showDevice,Mobile.device
B - Phone.showDevice,Phone.device Mobile.showDevice,Mobile.device Mobile.showDevice,Mobile.device
C - Mobile.showDevice,null Mobile.showDevice,Mobile.device Mobile.showDevice,Mobile.device
D - Compile Time error
E - RunTimeException is thrown

Sem compilar, por favor.
E uma explicação é bem-vinda :slight_smile:

10 Respostas

S

Resposta “D”

Não é permitido reescrever um atributo static como não static!!!

[]s Victor

S
class A {
    static int a = 1;
}

class B extends A {
    int a = 10;
}

Compila sem problemas :)

F

rapaz… fiquei na duvida da porra
acho q C,

ele chama o construtor da classe pai , que chama o metodo da classe filho, soh q o atributo da classe filho naum foi carregado ainda pq esta executando o construtor do pai, ai ele imprime null, e depois que ele termina de executar o construtor do pai, ele vai terminar de executar o
construtor da classe filho , que chama o metodo showDevice() da classe Mobile e agora o atributo ja esta criado, ai ele imprime o valor do atributo beleza, e logo depois ele chama o showDevice de Mobile q executa o q foi reescrito na classe Mobile…

6.     Mobile() { 
           super();  //chama automaticamente o super() das classes pai
7.        showDevice(); 
8.     }
S

É exatamente isso, letra C.

Quando os atributos de uma classe são efetivamente criados?
Isso acontece com membros de qualquer tipo (primitivo ou objeto) ?

F

isso se fosse metodo …

F

os valores dos atributos de classe sao colocados quando termina de executar o construtor da classe pai, isso acontece para todos os atributos…
tando primitivos, quanto referencias, ao estar executando o construtor da classe pai, os atributos permenecem com seus valores padrao…
ao termino da execucao eles verificam se houve alguma atribuicao e a realiza… lembre-se primeiro que chama o construtor do pai … sempre…

S

Putz, eu não tava ligado nisso :???:

Valeu mesmo cara.

F

Agora se o atributo da classe filha for static , ele imprime normal,
isso porque os atributos estaticos sao carregados antes de qualquer execucao de construtor!!!! :wink:

class Demonstracao{
  public Demonstracao() {
    imprimir();
  }  
  
  public void imprimir(){
    System.out.println(atributo1);
  }
  
  String atributo1 = "Demonstracao";

}
class Exemplo extends Demonstracao {

  public Exemplo() {
    imprimir();
  }  

  public void imprimir(){
    System.out.println(atributo1);
  }

  static String atributo1 = "Exemplo";

  public static void main(String[] args) {
    Demonstracao ex = new Exemplo();
  }
    
}

o q sera impresso qdo vc tentar compilar e rodar esse programa?

S

Seria o mesmo que o caso anterior, porém dessa vez a variável é static?

Exemplo
Exemplo
?

S

Ae pessoal! massa esta questão eim! eu não estava ligado nisso! valeu pelos toques…

Criado 26 de fevereiro de 2005
Ultima resposta 27 de fev. de 2005
Respostas 10
Participantes 3