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
}
}