Alguem poderia me falar a resposta e a explicação desse codigo?
public class Locura {
public Locura(Long a, Long b)
{
System.out.println("Long a, Long b");
}
public Locura(long a, long b)
{
System.out.println("long a, long b");
}
public static void main(String[] args) {
Long a = 10L;
new Locura(a, 15L);
}
}
A minha aposta é que o compilador emite um erro porque a chamada é ambígua, mas não tenho certeza (e no momento não tenho como testar). Para tirar a dúvida, tente compilar isso e vê o que acontece.
O problema acontece pq vc está colocando parâmetros diferentes para chamar o mesmo método. O 1º parâmetro é um Wrapper Long e o 2º é um primitivo long, aí está o problema. Não tem nenhum construtor que receba como argumento um Wrapper Long e um primitivo long. Ou vc sobrecarrega outro construtor que tenha como argumento um Wrapper Long e um primitivo long ou na hora de chamar o construtor passe como está definido nos construtores…blz!!!
[quote=javac]
Locura.java:15: reference to Locura is ambiguous, both method Locura(java.lang.Long,java.lang.Long) in Locura and method Locura(long,long) in Locura match
new Locura(a, 15L);
^
1 error
[/quote][/quote]
hehe, foi dai mesmo que tirei minhas conclusões;
essa tbm é boa;
public class Teste {
public Teste(Object obj) {
System.out.println("Object");
}
public Teste(String obj) {
System.out.println("String");
}
public Teste(Integer obj) {
System.out.println("Integer");
}
public static void main(String[] args) {
new Teste(null);
}
}
e essa:
public class Teste {
public Teste(Object obj) {
System.out.println("Object");
}
public Teste(A obj) {
System.out.println("A");
}
public Teste(B obj) {
System.out.println("B");
}
public static void main(String[] args) {
new Teste(null);
}
class A {
}
class B extends A {
}
}
Galera quero vem quem mata essa aki sem compilar. Pegando a carona no código do nosso amigo. Eu digo a resposta mas vamos ver o que todos dizem.
public class Teste2{
public Teste2(Object obj) {
System.out.println("Object");
}
public Teste2(A obj) {
System.out.println("A");
}
public Teste2(B obj) {
System.out.println("B");
}
public Teste2(C obj) {
System.out.println("C");
}
public Teste2(A2 obj) {
System.out.println("A2");
}
public static void main(String[] args) {
new Teste2(10);
C c1 = null;
c1.Teste2(new A2(){public void Teste2(A a) {}})
}
class A {
}
class B extends A {
}
public class C implements A2{
public void Teste2(A2 a){}
public void Teste2(A a) {}
}
interface A2{void Teste2(A a);}
}
Respostas:
a)Imprime A2
b)Imprime C
c)Lança uma exceção em tempo de execução
d)Contêm um erro em um ponto do código
e)Contêm varios erros
f)Imprime B
g)Imprime A
[quote=anderson.bonavides]Galera quero vem quem mata essa aki sem compilar. Pegando a carona no código do nosso amigo. Eu digo a resposta mas vamos ver o que todos dizem.
public class Teste2{
public Teste2(Object obj) {
System.out.println("Object");
}
public Teste2(A obj) {
System.out.println("A");
}
public Teste2(B obj) {
System.out.println("B");
}
public Teste2(C obj) {
System.out.println("C");
}
public Teste2(A2 obj) {
System.out.println("A2");
}
public static void main(String[] args) {
new Teste2(10);
C c1 = null;
c1.Teste2(new A2(){public void Teste2(A a) {}})
}
class A {
}
class B extends A {
}
public class C implements A2{
public void Teste2(A2 a){}
public void Teste2(A a) {}
}
interface A2{void Teste2(A a);}
}
Respostas:
a)Imprime A2
b)Imprime C
c)Lança uma exceção em tempo de execução
d)Contêm um erro em um ponto do código
e)Contêm varios erros
f)Imprime B
g)Imprime A[/quote]
Chegou perto vanzella. Olha só ocorre um erro de compilação. Se vc prestar atenção na linha da chamada do método vai verificar que estã faltando um ponto e virgula no final da classe de método.
Olha só a identação:
c1.Teste2(new A2(){
public void Teste2(A a) {
}
}); //faltava o ponto e virgula.
Caso corrigisse esse problema ai sim o código lançava uma exceção como vc destacou.
Fiz isso pra testar pra ver se a turma tava compilando o código antes de postar a saída. Mas nem deu tempo.