Στην Java, η υπερφόρτωση μεθόδων είναι ένα χαρακτηριστικό που επιτρέπει σε μια κλάση να έχει περισσότερες από μία μεθόδους με το ίδιο όνομα, αρκεί οι λίστες παραμέτρων τους να είναι διαφορετικές. Σχετίζεται με τον πολυμορφισμό κατά τον χρόνο μεταγλώττισης (ή στατικό πολυμορφισμό). Αυτή η έννοια είναι κρίσιμη για τη δημιουργία μεθόδων που εκτελούν παρόμοιες εργασίες αλλά με διαφορετικά δεδομένα εισόδου.
Η υπερφόρτωση μεθόδων αυξάνει την αναγνωσιμότητα του προγράμματος. Μπορούμε να δώσουμε σε διαφορετικές μεθόδους το ίδιο όνομα αλλά με διαφορετικές παραμέτρους. Ανάλογα με τον αριθμό ή τον τύπο των παραμέτρων, καλείται η αντίστοιχη μέθοδος.
Το κλειδί για την υπερφόρτωση μεθόδων είναι η υπογραφή της μεθόδου. Δύο μέθοδοι θεωρούνται διαφορετικές αν έχουν διαφορετικές υπογραφές. Υπάρχουν δύο τρόποι υπερφόρτωσης μιας μεθόδου:
Διαφορετικός αριθμός παραμέτρων: Οι μέθοδοι μπορούν να έχουν το ίδιο όνομα αλλά διαφορετικό αριθμό παραμέτρων.
public class Display {
public void show(int x) {
System.out.println("Show with int: " + x);
}
public void show(int x, int y) {
System.out.println("Show with two ints: " + x + ", " + y);
}
}
Διαφορετικοί τύποι παραμέτρων: Οι μέθοδοι μπορούν να έχουν το ίδιο όνομα και τον ίδιο αριθμό παραμέτρων αλλά με διαφορετικούς τύπους.
public class Display {
public void show(int x) {
System.out.println("Show with int: " + x);
}
public void show(String s) {
System.out.println("Show with String: " + s);
}
}
Σε αυτή την ενότητα, θα εξερευνήσουμε διάφορα παραδείγματα και λεπτομέρειες της υπερφόρτωσης μεθόδων στην Java.
Σε αυτή την άσκηση παίζεις ένα παιχνίδι ρόλων με το όνομα "Wizard and Warriors" με τους καλύτερους φίλους σου. Είσαι ο Game Master, το άτομο που έχει αναλάβει να ζωντανέψει τον κόσμο του παιχνιδιού για τους παίκτες. Ένα βασικό κομμάτι αυτού είναι να περιγράφεις το παιχνίδι στους παίκτες: ποια είναι η κατάσταση ενός χαρακτήρα, πώς μοιάζει η πόλη που επισκέπτονται κ.λπ.
Έχεις πέντε εργασίες που σε βάζουν να περιγράψεις κομμάτια του παιχνιδιού στους παίκτες.
Κάθε χαρακτήρας έχει κλάση, επίπεδο και αριθμό πόντων ζωής και περιγράφεται ως εξής: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.".
Υλοποίησε τη μέθοδο GameMaster.describe που παίρνει ένα Character ως μοναδική παράμετρο και επιστρέφει την περιγραφή του.
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
new GameMaster().describe(character);
// => "You're a level 4 Wizard with 28 hit points."
Κάθε προορισμός έχει ένα όνομα και έναν αριθμό κατοίκων και περιγράφεται ως εξής: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.".
Υλοποίησε τη μέθοδο GameMaster.describe που παίρνει ένα Destination ως μοναδική παράμετρο και επιστρέφει την περιγραφή του.
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."
Οι χαρακτήρες μπορούν να ταξιδέψουν σε έναν προορισμό με μία από δύο επιλογές:
"You're traveling to your destination by walking."
"You're traveling to your destination on horseback."
Υλοποίησε τη μέθοδο GameMaster.describe που παίρνει ένα TravelMethod ως μοναδική παράμετρο και επιστρέφει την περιγραφή του.
new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."
Όταν ένας χαρακτήρας ταξιδεύει σε έναν προορισμό, αυτό περιγράφεται ως συνδυασμός των επιμέρους περιγραφών: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>".
Υλοποίησε τη μέθοδο GameMaster.describe που παίρνει ένα Character, ένα Destination και ένα TravelMethod ως παραμέτρους και επιστρέφει την περιγραφή του.
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(character, destination, TravelMethod.HORSEBACK);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination on horseback. You've arrived at Muros, which has 732 inhabitants."
Στις περισσότερες περιπτώσεις, οι χαρακτήρες ταξιδεύουν σε έναν προορισμό με τα πόδια.
Για ευκολία, οι παίκτες μπορούν να παραλείψουν να αναφέρουν τον τρόπο μετακίνησής τους, οπότε θεωρείται ότι μετακινούνται με τα πόδια.
Υλοποίησε τη μέθοδο GameMaster.describe που παίρνει ένα Character και ένα Destination ως παραμέτρους και επιστρέφει την περιγραφή του.
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(character, destination);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination by walking. You've arrived at Muros, which has 732 inhabitants."
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.