Τα πλεονεκτήματα και τα μειονεκτήματα της μεθόδου υπερφόρτωσης σε Java

Οι υπερφορτωμένες μέθοδοι είναι μέθοδοι στην ίδια κλάση που μοιράζονται το ίδιο όνομα αλλά δέχονται διαφορετικούς τύπους μεταβλητών ως ορίσματα. Για παράδειγμα, μια κλάση μπορεί να περιέχει δύο διαφορετικές μεθόδους "add": μία που δέχεται δύο διπλές τιμές, "add (double a, double b)" και μία που δέχεται δύο ακέραιες τιμές, "add (int a, int b)." Ο υπολογιστής αποφασίζει αυτόματα ποια μέθοδο θα καλέσει κατά το χρόνο εκτέλεσης με βάση τους τύπους μεταβλητών που μεταβιβάζονται στο μέθοδος.

Ευκαμψία

Οι υπερφορτωμένες μέθοδοι δίνουν στους προγραμματιστές την ευελιξία να καλούν μια παρόμοια μέθοδο για διαφορετικούς τύπους δεδομένων. Εάν εργάζεστε σε ένα πρόγραμμα μαθηματικών, για παράδειγμα, μπορείτε να χρησιμοποιήσετε την υπερφόρτωση για να δημιουργήσετε πολλές τάξεις "πολλαπλασιασμού", καθένα από τα οποία πολλαπλασιάζει διαφορετικό αριθμό τύπων ορίσματος: το απλούστερο "πολλαπλασιάζω (int a, int b)" πολλαπλασιάζει δύο ακέραιοι αριθμοί? η πιο περίπλοκη μέθοδος "πολλαπλασιασμός (διπλός a, int b, int c)" πολλαπλασιάζει ένα διπλάσιο επί δύο ακέραιους -- θα μπορούσατε τότε καλέστε "πολλαπλασιασμό" σε οποιονδήποτε συνδυασμό μεταβλητών για τις οποίες δημιουργήσατε μια υπερφορτωμένη μέθοδο και λάβετε το σωστό αποτέλεσμα.

Το βίντεο της ημέρας

Κατασκευαστές

Η υπερφόρτωση χρησιμοποιείται επίσης σε κατασκευαστές για τη δημιουργία νέων αντικειμένων με διαφορετικές ποσότητες δεδομένων. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε την υπερφόρτωση για να δημιουργήσετε τρεις διαφορετικούς κατασκευαστές για ένα αντικείμενο "House" με αριθμό σπιτιού, όνομα οδού και μεταβλητές χρώματος. Ο απλούστερος κατασκευαστής "House()" δεν δέχεται ορίσματα και δημιουργεί ένα σπίτι με προεπιλεγμένες ή κενές μεταβλητές. Ένας πιο περίπλοκος κατασκευαστής, το "House (int houseNumber, String streetName)" δημιουργεί ένα σπίτι με τον καθορισμένο αριθμό σπιτιού και όνομα οδού, αλλά προεπιλεγμένο ή κενό χρώμα. Ο πιο περίπλοκος κατασκευαστής, "House (int houseNumber, String streetName, String color)" δημιουργεί ένα σπίτι με όλες τις καθορισμένες πληροφορίες, χωρίς να αφήνει τίποτα ως προεπιλογή. Στη συνέχεια, θα μπορούσατε να δημιουργήσετε ένα αντικείμενο σπιτιού με βάση τις πληροφορίες που είναι διαθέσιμες αυτήν τη στιγμή, με τις μη διαθέσιμες πληροφορίες να παραμένουν κενές ή προεπιλεγμένες.

Διφορούμενες αναφορές

Οι υπερφορτωμένες μέθοδοι πρέπει να χρησιμοποιούν διαφορετικούς αριθμούς ή τύπους ορισμάτων για να αποφευχθεί η ασάφεια. Εάν δημιουργήσετε δύο μεθόδους στην ίδια κλάση που έχουν το ίδιο όνομα και αποδεχτείτε δύο ακέραιους αριθμούς ως ορίσματα, το Ο μεταγλωττιστής Java δεν θα μπορεί να διακρίνει μεταξύ των δύο, ακόμα κι αν οι μεταβλητές εισόδου έχουν διαφορετικά ονόματα. Για παράδειγμα, η μέθοδος "add (int a, int b)" δεν μπορεί να υπάρχει στην ίδια κατηγορία με τη μέθοδο "add (int c, int d)."

Τύποι επιστροφής

Πρέπει να ορίσετε έναν τύπο επιστροφής για κάθε υπερφορτωμένη μέθοδο. Οι μέθοδοι μπορεί να έχουν διαφορετικούς τύπους επιστροφής -- για παράδειγμα, το "add (int a, int b)" μπορεί να επιστρέψει έναν ακέραιο αριθμό, ενώ το "add (double a, double b)" επιστρέφει διπλό. Ωστόσο, η Java δεν μπορεί να διακρίνει δύο διαφορετικές μεθόδους με βάση τον τύπο επιστροφής τους. Επομένως, το "int multiply (double a, double b)" δεν μπορεί να υπάρχει στην ίδια κατηγορία με το "double multiply (double a, double b)."