2012-06-14 14 views
6

Ho due file:significato di "non può ridurre la visibilità del metodo ereditato" con un'interfaccia

public interface PrintService { 
    void print(PrintDetails details); 
    class PrintDetails { 
     private String printTemplate; 
    } 
    public interface Task { 
     String ACTION = "print"; 
    } 
} 

e

public class A implements PrintService { 
    void print(PrintDetails details) { 
     System.out.println("printing: " + details); 
    } 
    String action = PrintService.Task.ACTION; 
} 

Ho pensato che il codice sembra a posto, ma sto ottenendo un errore nel secondo file per la riga

Impossibile ridurre la visibilità del metodo ereditato da PrintService.

Qualcuno può spiegare cosa significa questo per me?

risposta

21

In un'interfaccia Java ogni metodo è per default public:

Ogni dichiarazione di metodo nel corpo di un interfaccia è implicitamente astratto, per cui il suo corpo è sempre rappresentata da un punto e virgola, non un blocco.

Ogni dichiarazione di metodo nel corpo di un'interfaccia è implicitamente pubblica. [..]

In una classe che implementa non ti è permesso di ridurre la visibilità, e non specificando un modificatore di accesso:

void print(){..} 

si specifica il livello di accesso default, che ha una visibilità inferiore a public.

2

Rendi pubblico il metodo nella classe in cui viene implementato l'interfaccia, perché in un'interfaccia di default ogni metodo è pubblico e astratto.

Problemi correlati