Sobes.tech
Junior

Czym są dziedziczenie i polimorfizm w typach danych referencyjnych?

sobes.tech AI

Odpowiedź od AI

Dziedziczenie to mechanizm pozwalający jednej klasie (klasie potomnej, klasie dziedziczącej) na przejęcie właściwości i zachowań innej klasy (klasy bazowej, klasy nadrzędnej). Sprzyja to ponownemu użyciu kodu i tworzeniu hierarchii klas.

Polimorfizm to zdolność obiektów różnych klas do reagowania na tę samą wiadomość (wywołanie metody) w różny sposób, w zależności od ich konkretnego typu. W kontekście dziedziczenia często objawia się to przez nadpisanie metod klasy bazowej w klasie potomnej.

Przykład (Java):

// Klasa bazowa
class Animal {
    public void makeSound() {
        System.out.println("Zwierzę wydaje dźwięk");
    }
}

// Klasa potomna
class Dog extends Animal {
    @Override // Nadpisanie metody
    public void makeSound() {
        System.out.println("Hau!");
    }
}

// Klasa potomna
class Cat extends Animal {
    @Override // Nadpisanie metody
    public void makeSound() {
        System.out.println("Miau!");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Obiekt Dog, ale referencja typu Animal
        Animal myCat = new Cat(); // Obiekt Cat, ale referencja typu Animal

        myDog.makeSound(); // Wywołanie metody Dog
        myCat.makeSound(); // Wywołanie metody Cat
    }
}

W tym przykładzie:

  • Dziedziczenie: Klasy Dog i Cat dziedziczą po Animal.
  • Polimorfizm: Zmienne myDog i myCat odwołują się odpowiednio do obiektów Dog i Cat, mimo że mają typ Animal. Przy wywołaniu makeSound() wykonywana jest metoda obiektu, a nie typu referencji.