Sobes.tech
Middle

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

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.