Διαδρομές
/
Java
Java
/
Ασκήσεις
/
Μάγοι και πολεμιστές 2
Μάγοι και πολεμιστές 2

Μάγοι και πολεμιστές 2

Άσκηση εκμάθησης

Εισαγωγή

Υπερφόρτωση μεθόδων

Στην Java, η υπερφόρτωση μεθόδων είναι ένα χαρακτηριστικό που επιτρέπει σε μια κλάση να έχει περισσότερες από μία μεθόδους με το ίδιο όνομα, αρκεί οι λίστες παραμέτρων τους να είναι διαφορετικές. Σχετίζεται με τον πολυμορφισμό κατά τον χρόνο μεταγλώττισης (ή στατικό πολυμορφισμό). Αυτή η έννοια είναι κρίσιμη για τη δημιουργία μεθόδων που εκτελούν παρόμοιες εργασίες αλλά με διαφορετικά δεδομένα εισόδου.

Γιατί να υπερφορτώνουμε μεθόδους;

Η υπερφόρτωση μεθόδων αυξάνει την αναγνωσιμότητα του προγράμματος. Μπορούμε να δώσουμε σε διαφορετικές μεθόδους το ίδιο όνομα αλλά με διαφορετικές παραμέτρους. Ανάλογα με τον αριθμό ή τον τύπο των παραμέτρων, καλείται η αντίστοιχη μέθοδος.

Πώς να υπερφορτώνουμε μεθόδους;

Το κλειδί για την υπερφόρτωση μεθόδων είναι η υπογραφή της μεθόδου. Δύο μέθοδοι θεωρούνται διαφορετικές αν έχουν διαφορετικές υπογραφές. Υπάρχουν δύο τρόποι υπερφόρτωσης μιας μεθόδου:

  1. Διαφορετικός αριθμός παραμέτρων: Οι μέθοδοι μπορούν να έχουν το ίδιο όνομα αλλά διαφορετικό αριθμό παραμέτρων.

    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);
        }
    }
    
  2. Διαφορετικοί τύποι παραμέτρων: Οι μέθοδοι μπορούν να έχουν το ίδιο όνομα και τον ίδιο αριθμό παραμέτρων αλλά με διαφορετικούς τύπους.

    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, το άτομο που έχει αναλάβει να ζωντανέψει τον κόσμο του παιχνιδιού για τους παίκτες. Ένα βασικό κομμάτι αυτού είναι να περιγράφεις το παιχνίδι στους παίκτες: ποια είναι η κατάσταση ενός χαρακτήρα, πώς μοιάζει η πόλη που επισκέπτονται κ.λπ.

Έχεις πέντε εργασίες που σε βάζουν να περιγράψεις κομμάτια του παιχνιδιού στους παίκτες.

1. Περιέγραψε έναν χαρακτήρα

Κάθε χαρακτήρας έχει κλάση, επίπεδο και αριθμό πόντων ζωής και περιγράφεται ως εξής: "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."

2. Περιέγραψε έναν προορισμό

Κάθε προορισμός έχει ένα όνομα και έναν αριθμό κατοίκων και περιγράφεται ως εξής: "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."

3. Περιέγραψε τον τρόπο μετακίνησης

Οι χαρακτήρες μπορούν να ταξιδέψουν σε έναν προορισμό με μία από δύο επιλογές:

  • Με τα πόδια, που περιγράφεται ως εξής: "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."

4. Περιέγραψε έναν χαρακτήρα που ταξιδεύει σε έναν προορισμό

Όταν ένας χαρακτήρας ταξιδεύει σε έναν προορισμό, αυτό περιγράφεται ως συνδυασμός των επιμέρους περιγραφών: "<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."

5. Περιέγραψε έναν χαρακτήρα που ταξιδεύει σε έναν προορισμό χωρίς προσδιορισμό του τρόπου μετακίνησης

Στις περισσότερες περιπτώσεις, οι χαρακτήρες ταξιδεύουν σε έναν προορισμό με τα πόδια. Για ευκολία, οι παίκτες μπορούν να παραλείψουν να αναφέρουν τον τρόπο μετακίνησής τους, οπότε θεωρείται ότι μετακινούνται με τα πόδια. Υλοποίησε τη μέθοδο 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."
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Java Exercism

Έτοιμος να ξεκινήσεις την άσκηση Μάγοι και πολεμιστές 2;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.