Pegadinha com overloading

8 respostas
cv1

O que isso imprime?

public class Foo {
  public static void bar(String foo, Object bar) {
    System.out.println("bar 1");
  }

  public static void bar(Object foo, Integer bar) {
    System.out.println("bar 2");
  }

  public static void main(String[] args) {
    System.out.println(bar("foo", new Integer(1));
  }

8 Respostas

LecaDF

Este código não irá compilar, por que há ambiguidades na sobrecarga dos métodos. A ambiguidade acontece por que uma String é um objeto, e wrapper class Integer idem.

Alessandro F. Leite

cariocathi

:?: :?: :?: :?: :?:

legal

elvishr

Está faltando um parênteses na chamada do método bar

:?

Hempx

“New__Radical”:
Muito boa!!!

E também, o método statico bar, retorna uma void, que não pode ser usado por println.

porque???
nao entendi??
o println nao procuraria o metado toString ???

elvishr

nao entendi??
o println nao procuraria o metado toString ???

Sim, se retornasse alguma coisa…

Daniel_Quirino_Olive

Ok, pessoal. O que o Carlos quis dizer foi:

public class Foo {
  public static void bar(String foo, Object bar) {
    System.out.println("bar 1");
  }

  public static void bar(Object foo, Integer bar) {
    System.out.println("bar 2");
  }

  public static void main(String[] args) {
    bar("foo", new Integer(1));
  }
}

Pronto. O que isso imprime?
a) bar 1
b) bar 2
c) compile-time error
d) runtime error
e) nda

cv1

Droga, acharam as 3 pegadinhas :smiley:

Parabens td mundo aih, vcs acertaram todas :wink:

N

Muito boa!!!

E também, o método statico bar, retorna uma void, que não pode ser usado por println.

Criado 3 de novembro de 2003
Ultima resposta 3 de nov. de 2003
Respostas 8
Participantes 7