2012-06-14 15 views
6

Mam dwa pliki:Sens „Nie można zmniejszyć widoczność odziedziczonej metody” z interfejsem

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

i

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

Myślałem kod wygląda w porządku, ale jestem coraz błąd w drugim pliku dla linii void print(PrintDetails details) {, który stwierdza:

Nie można zmniejszyć widoczności odziedziczonej metody z PrintService.

Czy ktoś może wyjaśnić, co to oznacza dla mnie?

Odpowiedz

21

W interfejsie Java każda metoda jest domyślnie public:

Każda deklaracja metody w ciele interfejs jest domyślnie abstrakcyjny, więc jego ciało jest zawsze reprezentowana przez średnikiem, a nie bloku.

Każda deklaracja metody w treści interfejsu jest domyślnie jawna. [..]

W klasie wykonawczego nie są dozwolone w celu zmniejszenia widoczności, a także nie określając modyfikator dostępu:

void print(){..} 

jesteś określające poziom dostępu default, który ma mniejszą widoczność niż public.

2

Udostępnij metodę publiczną w klasie, w której implementuje interfejs, ponieważ w interfejsie domyślnie każda metoda jest jawna i abstrakcyjna.

Powiązane problemy