Interfejs – definicja abstrakcyjnego typu posiadającego jedynie operacje, a nie dane. Kiedy w konkretnej klasie zdefiniowane są wszystkie metody interfejsu mówimy, że klasa implementuje dany interfejs. W programie mogą być tworzone zmienne typu referencja do interfejsu, nie można natomiast tworzyć obiektów tego typu. Referencja może wskazywać na obiekt dowolnej klasy implementującej dany interfejs. Interfejs określa udostępniane operacje, nie zawiera natomiast ich implementacji i danych. Z tego powodu klasy mogą implementować wiele interfejsów, bez problemów wynikających z wielokrotnego dziedziczenia. Wszystkie metody w interfejsie z reguły muszą być publiczne.
Interfejs pozwala na hermetyzację obiektów, utworzonych w oparciu o klasy zawierające definicję (implementację) wspólnego interfejsu. Tak rozumiany interfejs, w ramach programowania obiektowego, określany jest też mianem interfejs klasy.
- w języku C++ interfejs może być zdefiniowany jako klasa abstrakcyjna
- w Javie, C#, Object Pascalu oraz PHP stosuje się w tym celu specjalną deklarację ze słowem interface
Przykład interfejsu w Javie
interface Interfejs{
public void proc();
}
class Klasa implements Interfejs{
@Override
public void proc(){
// ...
}
}
Interfejs a Klasa Abstrakcyjna
między w/w typami danych są następujące różnice:
- Interfejs może zawierać jedynie deklaracje metod, a klasa abstrakcyjna może zawierać również metody zdefiniowane.
- Rozszerzając klasę abstrakcyjną klasa może uczestniczyć jedynie w jednej hierarchii, natomiast używając interfejsów klasa może uczestniczyć w wielu typach hierarchii.
- interfejsy – w przeciwieństwie do klas abstrakcyjnych – wymagają od użytkownika implementacji wszystkich metod w nich zawartych. Ponadto Klasy abstrakcyjne mogą ułatwić ten proces, umożliwiając podstawową implementację danej funkcjonalności[1].
- Wszystkie zadeklarowane metody w interfejsie są publiczne, natomiast metody zadeklarowane w klasach mogą być publiczne lub chronione.
- Klasy abstrakcyjne mogą zawierać atrybuty, natomiast interfejsy – nie[2].
Przypisy
- ↑ Rozmowa kwalifikacyjna z Javy? Żaden problem! Cz. III (Core) [online], it-leaders.com.pl [dostęp 2018-10-25] [zarchiwizowane z adresu 2018-10-24] (pol.).
- ↑ Programistyka: Różnice między klasą abstrakcyjną, a interfejsem [online], sebastian-malaca.blogspot.com [dostęp 2018-10-25] .