a - não compila
b - compila e lança runtime exception
c - roda e imprime Teste02, Base, Sub, MetodoSub, nada
d - roda e imprime Base, Sub, MetodoBase, nada
e - roda e imprime Teste02, Sub, Base, MetodoBase
f - roda e imprime Teste02, Base, Sub, MetodoBase
g - roda e imprime Teste02, Base, Sub, MetodoBase, nada
h - roda e imprime Teste02, Base, Sub, MetodoSub
class Base {
public Base() {
System.out.println("Base");
}
}
class Sub extends Base {
public Sub() {
System.out.println("Sub");
}
}
public class Teste02 {
boolean b;
final int i = 10;
public Teste02 () {
super();
System.out.println("Teste02");
}
public void metodo(Base b) {
System.out.println ("MetodoBase");
}
public void metodo(Sub s) {
System.out.println ("MetodoSub");
}
public boolean getB() {
return b;
}
public int getI() {
return i;
}
static public void main (String [] args) {
Teste02 t = new Teste02();
Base b = new Sub();
if (t.getB());
switch (t.getI()) {
case 10:
t.metodo(b);
default:
System.out.println ("nada");
}
}
}
Primeiro: Ao se instanciar o Teste02 ele chama seu construtor e imprime
Segundo: Ao se instanciar sub ele chama o seu construtor. Mas Sub estende Base, então o construtor de superclasse é chamado imprime sub depois volta o controle para Base e imprime.
Terceiro: O valor boolean retorna false pois todos os valores que não foram explicitamente inicializados são configurados como 0 ou seus respectivos valores ( null para referências, false boolean e 0 numéricos.) MAS o if não está condicionando o switch logo ele retorna false e no final tem um ;.
Quarto: O método retorna um valor do tipo inteiro (10) e a primeira condição é de valor 10 entao o método com referência B (MétodoBase) é impresso e como não tem um break no switch ele continua com o caso default e imprime “nada”.
Primeiro: Ao se instanciar o Teste02 ele chama seu construtor e imprime
Segundo: Ao se instanciar sub ele chama o seu construtor. Mas Sub estende Base, então o construtor de superclasse é chamado imprime sub depois volta o controle para Base e imprime.
Terceiro: O valor boolean retorna false pois todos os valores que não foram explicitamente inicializados são configurados como 0 ou seus respectivos valores ( null para referências, false boolean e 0 numéricos.) MAS o if não está condicionando o switch logo ele retorna false e no final tem um ;.
Quarto: O método retorna um valor do tipo inteiro (10) e a primeira condição é de valor 10 entao o método com referência B (MétodoBase) é impresso e como não tem um break no switch ele continua com o caso default e imprime “nada”.[/quote]
perfeito! todos acertaram
Acho que a maior “pegadinha” aqui é o fato de MetodoBase ser executado e não MetodoSub, já que em runtime o tipo do objeto passado para o método é Sub. Mas no caso de métodos overloaded o tipo da referência é usado para decidir qual método será chamado (em tempo de compilação), ao contrário de métodos overriden onde o tipo do objeto em runtime é usado para verificar qual método será chamado.
Acho que a maior “pegadinha” aqui é o fato de MetodoBase ser executado e não MetodoSub, já que em runtime o tipo do objeto passado para o método é Sub. Mas no caso de métodos overloaded o <b>tipo da referência</b> é usado para decidir qual método será chamado (em tempo de compilação), ao contrário de métodos overriden onde o <b>tipo do objeto em runtime</b> é usado para verificar qual método será chamado.[/quote]