Poniżej znajduje się przykładowa definicja interfejsu napisana w Javie. Pierwsze pytanie brzmi, które elementy tej definicji są poprawne? Drugie, jak poszczególne (poprawne) elementy zachowają się podczas implementacji interfejsu?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public interface InterfaceTest {

    // definicje pól
   
    int x1 = 1;
   
    public int x2 = 2;
   
    protected int x3 = 3;
   
    private int x4 = 4;
   
    static int x5 = 5;
   
    public static final int x6 = 6;
   
    final int x7 = 7;
   
   
    // metody
   
    int f1();
   
    public int f2();
   
    private int f3();
   
    protected int f4();
}

Poprawnie są zdefiniowane następujące pola: x1, x2, x5, x6, x7 oraz metody f1() i f2().

Błędne natomiast są definicje dla x3, x4 oraz f3() i f4(). Dlaczego?

Interfejs w praktyce definiuje nam zestaw pewnych publicznych metod, które zapewniają nam możliwość wywoływania określonych akcji na obiekcie. Z tego powodu w definicji interfejsu są dopuszczalne jedynie użycie modyfikatora public lub też jego brak (wtedy definicja także staje się publiczna). Inne przypadki są niedozwolone.

A teraz drugie pytanie, czy są jakieś różnice w dostępie do poszczególnych pól zdefiniowanych w interfejsie? Oto przykładowa klasa implementująca powyższy interfejs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Test implements InterfaceTest {

    @Override
    public int f1() {
        x1 = 0;
        x2 = 0;
        x5 = 0;
        x6 = 0;
        x7 = 0;
       
        return 0;
    }

    @Override
    public int f2() {
        return 0;
    }
}

Jak widać w klasie Test są zaimplementowane dwie metody f1() oraz f2(). W metodzie f1() następuje przypisanie nowej wartości zmiennym z interfejsu. Które przypisanie jest poprawne?

Odpowiedź: żadne. Dlaczego? Ponieważ definicje pól w interfejsie zawszą są finalne i statyczne.

Podsumowując, zasady jakie panują podczas definicji poszczególnych elementu interfejsu:

Pola interfejsu

  • mogą być tylko publiczne i tak są domyślnie definiowane
  • zawsze są statyczne
  • zawsze są finalne

Metody

  • mogą być tylko publiczne
  • nie mogą byś statyczne
  • nie mogą być finalne

Źródła