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