Jaka jest różnica między interfejsem a klasa abstrakcyjną?
Jaka jest różnica między interfejsem a klasa abstrakcyjną?

# Jaka jest różnica między interfejsem a klasą abstrakcyjną?

## Wprowadzenie

W dziedzinie programowania obiektowego, szczególnie w języku Java, często spotykamy się z pojęciami interfejsu i klasy abstrakcyjnej. Choć oba te koncepty mają na celu organizację kodu i zapewnienie elastyczności, istnieją pewne istotne różnice między nimi. W tym artykule przyjrzymy się bliżej tym dwóm pojęciom i wyjaśnimy, czym się różnią.

## Interfejs

### Definicja

Interfejs jest to konstrukcja językowa, która umożliwia deklarację zestawu metod, które klasa musi zaimplementować. Interfejsy w Javie są zadeklarowane za pomocą słowa kluczowego **interface**. Interfejsy mogą zawierać tylko deklaracje metod, ale nie mogą zawierać implementacji tych metod.

### Cechy interfejsu

1. **Abstrakcyjność**: Interfejsy są abstrakcyjne, co oznacza, że nie można tworzyć ich instancji. Służą one jedynie jako szablony dla klas, które je implementują.

2. **Wielokrotne dziedziczenie**: Klasa może implementować wiele interfejsów jednocześnie, co umożliwia wielokrotne dziedziczenie metod.

3. **Kontrakt**: Interfejsy definiują kontrakt, który musi być spełniony przez klasy implementujące. Oznacza to, że klasy muszą dostarczyć implementację wszystkich metod zadeklarowanych w interfejsie.

4. **Polimorfizm**: Interfejsy umożliwiają polimorfizm, co oznacza, że można używać różnych klas implementujących ten sam interfejs w sposób jednolity.

### Przykład użycia interfejsu

„`java
public interface Zwierze {
void dajGlos();
void poruszajSie();
}

public class Pies implements Zwierze {
@Override
public void dajGlos() {
System.out.println(„Hau hau!”);
}

@Override
public void poruszajSie() {
System.out.println(„Biegam na czterech łapach.”);
}
}

public class Kot implements Zwierze {
@Override
public void dajGlos() {
System.out.println(„Miau miau!”);
}

@Override
public void poruszajSie() {
System.out.println(„Chodzę na czterech łapach.”);
}
}
„`

W powyższym przykładzie mamy interfejs o nazwie „Zwierze”, który deklaruje dwie metody: „dajGlos()” i „poruszajSie()”. Klasy „Pies” i „Kot” implementują ten interfejs i dostarczają implementacje tych metod. Dzięki temu możemy traktować obiekty typu „Pies” i „Kot” jako obiekty typu „Zwierze” i wywoływać na nich te same metody.

## Klasa abstrakcyjna

### Definicja

Klasa abstrakcyjna jest to klasa, która może zawierać zarówno deklaracje metod, jak i ich implementacje. Klasa abstrakcyjna w Javie jest zadeklarowana za pomocą słowa kluczowego **abstract**. Klasa abstrakcyjna może zawierać zarówno metody abstrakcyjne, które nie mają implementacji, jak i metody z implementacją.

### Cechy klasy abstrakcyjnej

1. **Abstrakcyjność**: Klasy abstrakcyjne są również abstrakcyjne, co oznacza, że nie można tworzyć ich instancji. Służą one jako szablony dla klas dziedziczących.

2. **Dziedziczenie**: Klasy abstrakcyjne mogą być dziedziczone przez inne klasy. Klasy dziedziczące muszą dostarczyć implementację wszystkich metod abstrakcyjnych z klasy abstrakcyjnej.

3. **Implementacja metod**: Klasy abstrakcyjne mogą zawierać zarówno metody abstrakcyjne, jak i metody z implementacją. Metody z implementacją mogą być wywoływane bezpośrednio z klasy dziedziczącej.

### Przykład użycia klasy abstrakcyjnej

„`java
public abstract class Figura {
protected String kolor;

public Figura(String kolor) {
this.kolor = kolor;
}

public abstract double obliczPole();

public void wyswietlKolor() {
System.out.println(„Kolor figury: ” + kolor);
}
}

public class Kwadrat extends Figura {
private double bok;

public Kwadrat(String kolor, double bok) {
super(kolor);
this.bok = bok;
}

@Override
public double obliczPole() {
return bok * bok;
}
}

public class Kolo extends Figura {
private double promien;

public Kolo(String kolor, double promien) {
super(kolor);
this.promien = promien;
}

@Override
public double obliczPole() {
return Math.PI * promien * promien;
}
}
„`

W powyższym przykładzie mamy klasę abstrakcyjną o nazwie „Figura”, która zawiera pole „kolor” oraz deklarację metody abstrakcyjnej „obliczPole()”. Klasa „Figura” zawiera również metodę z implementacją „wyswietlKolor()”. Klasy „Kwadrat” i „Kolo” dziedziczą po klasie „Figura” i dostarczają implementacje metody „obliczPole()”. Dzięki temu

Różnica między interfejsem a klasą abstrakcyjną polega na tym, że interfejs definiuje jedynie sygnatury metod, które klasa implementująca musi zaimplementować, natomiast klasa abstrakcyjna może zawierać zarówno zaimplementowane metody, jak i metody abstrakcyjne.

Link do strony Venture Day: https://ventureday.pl/

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here