2012-01-11 15 views
10

Cuando leo de varios libros y tutoriales de Java, las variables declaradas en una interfaz son constantes y no pueden anularse.Anulando la variable de la interfaz?

hice un simple código para probarlo

interface A_INTERFACE 
{ 
    int var=100; 
} 

class A_CLASS implements A_INTERFACE 
{ 
    int var=99; 
    //test 
    void printx() 
    { 
     System.out.println("var = " + var); 
    } 
} 

class hello 
{ 

    public static void main(String[] args) 
    { 
     new A_CLASS().printx(); 
    } 
} 

y se imprime var = 99

Está var conseguir anulados? Estoy totalmente confundido. ¡Gracias por cualquier sugerencia!


Muchas gracias a todos! Soy bastante nuevo en esta cosa de interfaz. "Shadow" es la palabra clave para entender esto. Busco los materiales relacionados y lo entiendo ahora.

+0

usted no "anular" una variable, solamente un método. –

Respuesta

11

No se reemplaza, sino que se sombrea, con confusión adicional porque la constante en la interfaz también es estática.

Prueba esto:

A_INTERFACE o = new A_CLASS(); 
System.out.println(o.var); 

Usted debe obtener un tiempo de compilación de advertencia acerca del acceso a un campo estático de una manera no estática.

Y ahora esto

A_CLASS o = new A_CLASS(); 
System.out.println(o.var); 
System.out.println(A_INTERFACE.var); // bad name, btw since it is const 
4

firma predeterminada para cualquier variable en una interfaz es

public static final ... 

lo que no puede anular todas maneras.

0

La variable que ha declarado en esa interfaz no es visible para la clase que la implementó.

Si declara una variable estática y final, es decir, una constante, ENTONCES es visible para los implementadores.

+2

Es 'estático' y' final' y 'público' (en virtud de estar en una' interfaz') – Thilo

10

No anuló la variable, sombreó con una nueva variable de instancia declarada en un ámbito más específico. Esta es la variable impresa en su método printx.

Cuestiones relacionadas