Pegadinha com overloading

O que isso imprime?

[code]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));
}[/code]

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

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

legal

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

:?

[quote=“New__Radical”]Muito boa!!!

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

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

[quote]nao entendi??
o println nao procuraria o metado toString ???[/quote]

Sim, se retornasse alguma coisa…

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

Droga, acharam as 3 pegadinhas :smiley:

Parabens td mundo aih, vcs acertaram todas :wink:

Muito boa!!!

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