parameter - type interface java




Significato di "Impossibile ridurre la visibilità del metodo ereditato" con un'interfaccia (2)

Ho due file:

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 fosse a posto, ma sto ricevendo un errore nel secondo file per la void print(PrintDetails details) { linee void print(PrintDetails details) { che afferma:

Impossibile ridurre la visibilità del metodo ereditato da PrintService .

Qualcuno può spiegare cosa significa questo per me?


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


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

Ogni dichiarazione di metodo nel corpo di un'interfaccia è implicitamente astratta, quindi il suo corpo è sempre rappresentato da un punto e virgola, non da un blocco.

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

In una classe di implementazione non è consentito ridurre la visibilità e non specificando un modificatore di accesso:

void print(){..}

stai specificando il livello di accesso predefinito , che ha una visibilità inferiore a quella public .







access-specifier