Sobes.tech
Junior

Ποια είναι η διαφορά μεταξύ κληρονομικότητας και πολυμορφισμού;

sobes.tech AI

Απάντηση από AI

Η κληρονομικότητα είναι ένας μηχανισμός που επιτρέπει σε μια κλάση (υποκλάση, υποκλάση) να κληρονομήσει πεδία και μεθόδους από μια άλλη κλάση (γονική, υπερκλάση). Αυτό προάγει την επανάχρηση κώδικα.

Ο πολυμορφισμός είναι η δυνατότητα να χρησιμοποιεί κανείς μια κοινή διεπαφή για να εκπροσωπήσει διαφορετικές βασικές μορφές. Στο πλαίσιο της Java, αυτό σημαίνει ότι μια μεταβλητή αναφοράς μπορεί να αναφέρεται σε ένα αντικείμενο του δικού της τύπου ή σε ένα αντικείμενο οποιουδήποτε από τα υποτύπους της. Διακρίνονται ο χρόνος μεταγλώττισης (υπερφόρτωση μεθόδων) και ο χρόνος εκτέλεσης (υπερκαλύψεις μεθόδων).

Βασική διαφορά:

  • Κληρονομικότητα ορίζει σχέσεις μεταξύ κλάσεων (γονέας-παιδί) και επιτρέπει την επανάχρηση κώδικα.
  • Πολυμορφισμός επιτρέπει την πρόσβαση σε διαφορετικά αντικείμενα μέσω μιας κοινής διεπαφής, εκτελώντας την αντίστοιχη μέθοδο ανάλογα με τον πραγματικό τύπο του αντικειμένου κατά την εκτέλεση.

Παράδειγμα πολυμορφισμού χρόνου εκτέλεσης:

class Animal {
    public void sound() {
        System.out.println("Το ζώο κάνει ήχο");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Γαβ-γαβ");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Μιαου-μιαου");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Πολυμορφισμός: μεταβλητή τύπου Animal που αναφέρεται σε αντικείμενο Dog
        Animal myCat = new Cat(); // Πολυμορφισμός: μεταβλητή τύπου Animal που αναφέρεται σε αντικείμενο Cat

        myDog.sound(); // Καλεί τη μέθοδο sound() της κλάσης Dog
        myCat.sound(); // Καλεί τη μέθοδο sound() της κλάσης Cat
    }
}