Βίντεο: ΠΛΗ 24: Πολυμορφισμός ΕΑΠ 2024
Ο πολυμορφισμός είναι ένας φανταστικός όρος πληροφορικής που αναφέρεται στην ικανότητα της Java να χρησιμοποιεί μεταβλητές βασικής κλάσης για να παραπέμπει σε αντικείμενα υποκατηγορίας, να παρακολουθεί ποια υποκατηγορία ανήκει σε ένα αντικείμενο, και να χρησιμοποιήσετε τις υπερδιπλωμένες μεθόδους της υποκατηγορίας, παρόλο που η υποκλάση δεν είναι γνωστή κατά τη σύνταξη του προγράμματος.
Ποτέ! Αυτό είναι μια μπουκιά. Αυτό που βράζει είναι ότι κάθε φορά που μια παράμετρος απαιτεί ένα συγκεκριμένο τύπο, μπορείτε να χρησιμοποιήσετε ένα αντικείμενο που δημιουργήθηκε από μια υποκατηγορία αυτού του τύπου.
Για παράδειγμα, ας υποθέσουμε ότι αναπτύσσετε μια εφαρμογή που μπορεί να παίξει το σεβάσμιο παιχνίδι Tic-Tac-Toe και δημιουργείτε μια κλάση με το όνομα Player που αντιπροσωπεύει έναν από τους παίκτες. Αυτή η κλάση έχει μια δημόσια μέθοδο που ονομάζεται κίνηση που επιστρέφει ένα int για να υποδείξει ποιο τετράγωνο του πίνακα που θέλει να επισημάνει ο παίκτης.
Για να κρατήσει τα πράγματα απλά, η μέθοδος μετακίνησης επιλέγει τυφλά την πρώτη κενή πλατεία στο τραπέζι ως κίνηση της. Αυτό είναι, φυσικά, μια τρομερή στρατηγική για τη νίκη στο Tic-Tac-Toe. Επομένως, αποφασίζετε να δημιουργήσετε μια καλύτερη έκδοση της κλάσης, που ονομάζεται BetterPlayer. Εφαρμόζετε την κλάση BetterPlayer ως υποκατηγορία της κλάσης Player, αλλά παρακάμψετε τη μέθοδο μετακίνησης έτσι ώστε η κλάση BetterPlayer να κάνει πιο έξυπνες κινήσεις από την κλάση Player.
Ας υποθέσουμε ότι έχετε γράψει επίσης μια μέθοδο που ονομάζεται MakeAMove στην κύρια κλάση για την εφαρμογή Tic-Tac-Toe (που ονομάζεται TicTacToe). Η μέθοδος MakeAMove μοιάζει με αυτό το παράδειγμα:
public void MakeAMove (Player p) {int i = p. κίνηση(); επιστροφή i;}
Θα μπορούσατε να καλέσετε τη μέθοδο MakeAMove όπως αυτή:
int m = MakeAMove (νέος παίκτης ());
Στην περίπτωση αυτή, η μέθοδος MakeAMove θα επιστρέψει το πρώτο κενό τετράγωνο στον πίνακα.
Αλλά υποθέστε ότι το αποκαλείτε έτσι:
int m = MakeAMove (νέο BetterPlayer ());
Σε αυτή την περίπτωση, η μέθοδος MakeAMove θα επιστρέψει μια καλύτερη σκέψη, επειδή η κατηγορία BetterPlayer χρησιμοποιεί έναν καλύτερο αλγόριθμο για να καθορίσει την επόμενη κίνηση του παίκτη.