2015-01-14 17 views
7

il codice è:Come può un riferimento null a un'interfaccia restituire un valore?

interface I { 
    int i = 0; 
    void display(); 
} 

class A implements I { 
    I i1; 

    public static void main(String[] args) { 
     A a = new A(); 
     a.display(); 
    } 

    public void display() { 
     System.out.println(i1); //1 
     System.out.println(i1.i); //2 
    } 
} 

L'uscita del codice è

null 
0 

Ma quando l'indirizzo del i è null, poi nel 2 ° i1.i come si restituisce un valore? Come può essere utilizzato un riferimento null per puntare a una variabile?

+2

correlati: http://stackoverflow.com/questions/11579953/static-fields-on-a-null-reference-in-java – assylias

risposta

20

Fields declared in interfaces are implicitly static.

Ogni dichiarazione di campo nel corpo di un'interfaccia è implicitamente public, static e final. È consentito specificare in modo ridondante alcuni o tutti questi modificatori per tali campi.

Questo

i1.i 

è un'espressione accesso static campo. Si basa sul tipo di i1, non sul suo valore. E 'esattamente equivalente a

I.i // where I is the name of your interface 
+5

e questo è il motivo per cui non è un buona idea di accedere ai campi statici attraverso un'istanza, anche se Java ti permette di farlo. – biziclop

+0

"I campi dichiarati nelle interfacce sono implicitamente statici" e definitivi. – dragon66

+0

Credo che Eclipse emetta un avvertimento quando lo fai, è una cattiva pratica in generale (anche se a volte è auspicabile) – MightyPork

Problemi correlati