Sobes.tech
Junior

Jaka jest różnica między dziedziczeniem a polimorfizmem?

sobes.tech AI

Odpowiedź od AI

Dziedziczenie to mechanizm umożliwiający klasie (klasa potomna, podklasa) dziedziczenie pól i metod innej klasy (klasa nadrzędna, superklasa). To sprzyja ponownemu użyciu kodu.

Polimorfizm to możliwość użycia tego samego interfejsu do reprezentowania różnych podstawowych form. W kontekście Java oznacza to, że zmienna referencyjna może odwoływać się do obiektu własnego typu lub do obiektu dowolnego z jego podtypów. Wyróżnia się polimorfizm czasu kompilacji (przeciążanie metod) i czasu wykonania (nadpisywanie metod).

Główna różnica:

  • Dziedziczenie definiuje relacje między klasami (rodzic-dziecko) i pozwala na ponowne użycie kodu.
  • Polimorfizm pozwala na dostęp do różnych obiektów przez wspólny interfejs, wykonując odpowiednią metodę w zależności od faktycznego typu obiektu w czasie wykonywania.

Przykład polimorfizmu czasu wykonania:

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

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Hau hau");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Miau miau");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Polimorfizm: zmienna typu Animal odwołuje się do obiektu Dog
        Animal myCat = new Cat(); // Polimorfizm: zmienna typu Animal odwołuje się do obiektu Cat

        myDog.sound(); // Wywołuje metodę sound() z klasy Dog
        myCat.sound(); // Wywołuje metodę sound() z klasy Cat
    }
}