[RESOLVIDO] Ambiguidade

3 respostas
M

Apesar de ter entendido a explicação dessa questão, não estou conseguindo diregir ela:

interface IT {

    int x = 1;
}

class CT {

    int x = 2;
}

public class MC extends CT implements IT {

    public static void main(String args[]) {
        System.out.println(x++);
    }
}

Questão do Examlab…
Eu pensei “bem… a classe MC herda 2 variaveis x…” ai ta… como saber qual?
Aí eu pensei "o método main é estatico, logo NEM sabe da existencia das variaveis de instancia (que no caso seria x = 2 vindo de CT).
Então, como main so conhece a variavel estatica x, vinda de IT, ocorrerá um erro de compilação ao incrementar uma variavel final…
Mas o erro que da é ambiguidade, alguem pode explicar?

Vlws!

3 Respostas

T

Pelo que imagino, o javac primeiro vê se é ambíguo, e depois vê as regras de visibilidade (se é estático, por exemplo). Isso talvez seja um detalhe de implementação do javac, tal como implementado pela Sun, mas o Eclipse (que usa um compilador diferente) também primeiro vê se é ambíguo (a mensagem é “The field x is ambiguous”) e depois vê as regras de visibilidade.

Acho que deve haver algum parágrafo na JLS (Java Language Specification) que indica o que o compilador deve fazer, e em que ordem. Não se preocupe com esse tipo de coisas em uma prova.

Se ele primeiro visse as regras de visibilidade (no seu caso, CT.x é uma variável de instância e não deveria se confundir com IT.x) e depois visse a ambiguidade, então você teria outro erro. Mas acho que é necessário primeiro resolver a ambiguidade.

EDIT - O Ozix matou a charada: é exatamente aquele link ( http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#40491 )

O

http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#40491

M

Valeu thingol e ozix!
Espero que nao caia muitas questões parecidas com as do examlab mesmo… Fazer esse teste só me desespera =P!

Criado 1 de julho de 2009
Ultima resposta 1 de jul. de 2009
Respostas 3
Participantes 3