2012-01-11 16 views
10

Mentre leggo da vari libri e tutorial Java, le variabili dichiarate in un'interfaccia sono costanti e non possono essere sovrascritte.Ignora la variabile dell'interfaccia?

Ho fatto un semplice codice di testarlo

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(); 
    } 
} 

ed esso stampa var = 99

Is var ottenere sovrascritti? Sono totalmente confuso. Grazie per eventuali suggerimenti!


Grazie mille a tutti! Sono abbastanza nuovo per questa cosa dell'interfaccia. "Shadow" è la parola chiave per capire questo. Guardo i materiali correlati e lo capisco ora.

+0

non si "override" una variabile, è solo un metodo. –

risposta

11

Non è sovrascritto, ma ombreggiato, con ulteriore confusione perché anche la costante nell'interfaccia è statica.

Prova questo:

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

Si dovrebbe ottenere un tempo di compilazione avvertimento circa l'accesso a un campo statico in modo non statico.

E ora questo

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 predefinita per qualsiasi variabile in un'interfaccia è

public static final ... 

così non si può ignorare lo stesso.

0

La variabile dichiarata nell'interfaccia non è visibile alla classe che l'ha implementata.

Se si dichiara una variabile in una statica e finale, cioè una costante, ALLORA è visibile agli implementatori.

+2

È 'static' e' final' e 'public' (in virtù di essere in una' interfaccia') – Thilo

10

Non hai eseguito l'override della variabile, è ombreggiato con una variabile di istanza nuova di zecca dichiarata in un ambito più specifico. Questa è la variabile stampata nel tuo metodo printx.