Τι είναι η κληρονομικότητα και ο πολυμορφισμός στους τύπους δεδομένων αναφοράς;
sobes.tech AI
Απάντηση από AI
Η κληρονομικότητα είναι ένας μηχανισμός που επιτρέπει σε μια νέα κλάση (υποκλάση/παιδί) να κληρονομήσει ιδιότητες (πεδία) και συμπεριφορές (μεθόδους) μιας υπάρχουσας κλάσης (υπερκλάση/γονική), επεκτείνοντας ή υπερκαλύπτοντας τη λειτουργικότητα. Αυτό προάγει την επανάχρηση κώδικα και καθιερώνει σχέσεις "είναι" (is-a).
Ο πολυμορφισμός είναι η δυνατότητα αντικειμένων διαφορετικών κλάσεων να ανταποκρίνονται διαφορετικά στο ίδιο όνομα μεθόδου, ανάλογα με τον συγκεκριμένο τύπο τους κατά την εκτέλεση. Παρέχει ευελιξία και επεκτασιμότητα στον κώδικα, επιτρέποντας την επεξεργασία αντικειμένων υποκλάσεων μέσω αναφοράς στην υπερκλάση.
Σε τύπους δεδομένων αναφοράς (κλάσεις), αυτές οι έννοιες παίζουν καθοριστικό ρόλο:
- Κληρονομικότητα: Η υποκλάση έχει πρόσβαση στα μέλη της υπερκλάσης και μπορεί να προσθέσει τα δικά της ή να τροποποιήσει τη συμπεριφορά των κληρονομημένων μεθόδων (υπερκαλύπτοντας - overriding). Ένα αντικείμενο υποκλάσης μπορεί να χρησιμοποιηθεί παντού όπου αναμένεται ένα αντικείμενο υπερκλάσης.
- Πολυμορφισμός: Διάφορα αντικείμενα που ανήκουν σε μια ίδια ιεραρχία κληρονομικότητας μπορούν να αντιμετωπίζονται με τον ίδιο κώδικα, καλώντας την ίδια μέθοδο, αλλά η υλοποίηση αυτής της μεθόδου θα είναι συγκεκριμένη για τον τύπο του αντικειμένου κατά την εκτέλεση.
Παράδειγμα σε Java:
// Υπερκλάση (γονική κλάση)
class Animal {
public void makeSound() {
System.out.println("Παράγει ήχο");
}
}
// Υποκλάση (παιδί), κληρονομεί από το Animal
class Dog extends Animal {
// Υπερκαλύπτει τη μέθοδο της υπερκλάσης
@Override
public void makeSound() {
System.out.println("Γαβ!");
}
}
// Υποκλάση (παιδί), κληρονομεί από το Animal
class Cat extends Animal {
// Υπερκαλύπτει τη μέθοδο της υπερκλάσης
@Override
public void makeSound() {
System.out.println("Μιάου!");
}
}
// Παράδειγμα πολυμορφισμού
public class PolymorphismExample {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // αντικείμενο υπερκλάσης
Animal myDog = new Dog(); // αντικείμενο υποκλάσης, αναφορά στην υπερκλάση
Animal myCat = new Cat(); // αντικείμενο υποκλάσης, αναφορά στην υπερκλάση
myAnimal.makeSound(); // Θα εμφανίσει: Παράγει ήχο
myDog.makeSound(); // Θα εμφανίσει: Γαβ! (πολυμορφισμός - μέθοδος Dog)
myCat.makeSound(); // Θα εμφανίσει: Μιάου! (πολυμορφισμός - μέθοδος Cat)
}
}