2.4 Ο πολυμορφισμός (Polymorphism) στην Java

Ο πολυμορφισμός στην Java αναφέρεται στην ικανότητα ενός αντικειμένου να παρουσιάζει διαφορετικές μορφές, με βάση την κλάση στην οποία ανήκει και τις σχέσεις κληρονομικότητας που έχει με άλλες κλάσεις. Αυτό σημαίνει ότι ένα αντικείμενο μπορεί να αντιμετωπίζεται ως αντικείμενο της ίδιας κλάσης ή των υποκλάσεών της.

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

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

Για παράδειγμα, ας υποθέσουμε μια γονική κλάση με το όνομα “Animal”, η οποία περιλαμβάνει μια μέθοδο με το όνομα “animalSound()”. Οι υποκλάσεις του “Animal” θα μπορούσαν να είναι “Χοίροι”, “Γάτες”, “Σκύλοι”, “Πουλιά” και κάθε μία από αυτές τις υποκλάσεις θα θα μπορούσε να υλοποιήσει τη δική της έκδοση του ήχου του ζώου (όπως το χοίρος θριέι, η γάτα νιαουρίζει, κλπ.).:

// Αυτή είναι μια κλάση Animal
class Animal {
  public void animalSound() {
    System.out.println("The animal makes a sound");  // Εμφανίζει μήνυμα στα αγγλικά για τον ήχο που κάνει το ζώο
  }
}

// Αυτή είναι μια υποκλάση της κλάσης Animal, ένα γουρούνι
class Pig extends Animal {
  public void animalSound() {
    System.out.println("The pig says: Oink oink");  // Εμφανίζει μήνυμα στα αγγλικά για τον ήχο που κάνει το γουρούνι
  }
}

// Αυτή είναι μια υποκλάση της κλάσης Animal, μια γάτα
class Cat extends Animal {
  public void animalSound() {
    System.out.println("The cat says: Meow");  // Εμφανίζει μήνυμα στα αγγλικά για τον ήχο που κάνει η γάτα
  }
}

// Αυτή είναι η κλάση Main που περιέχει τη μέθοδο main()
public class Main {
  public static void main(String[] args) {
    Animal myAnimal = new Animal();  // Δημιουργία αντικειμένου Animal
    Animal myPig = new Pig();  // Δημιουργία αντικειμένου Pig
    Animal myCat = new Cat();  // Δημιουργία αντικειμένου Cat
    
    myAnimal.animalSound();  // Κλήση της μεθόδου animalSound() για το αντικείμενο Animal
    myPig.animalSound();  // Κλήση της μεθόδου animalSound() για το αντικείμενο Pig
    myCat.animalSound();  // Κλήση της μεθόδου animalSound() για το αντικείμενο Cat
  }
}

Ο παραπάνω κώδικας περιλαμβάνει μια ιεραρχία κλάσεων που αντιπροσωπεύουν ζώα.

Η βασική κλάση είναι η Animal, η οποία έχει μια μέθοδο animalSound() που εμφανίζει ένα μήνυμα για τον ήχο που κάνει το ζώο.

Υπάρχουν δύο υποκλάσεις που κληρονομούν από την κλάση Animal: το Pig και η Cat. Και οι δύο υποκλάσεις έχουν τη δική τους υλοποίηση της μεθόδου animalSound(), η οποία εμφανίζει ένα συγκεκριμένο μήνυμα για τον ήχο που κάνει το κάθε ζώο.

Στην κλάση Main, στην μέθοδο main(), δημιουργούνται αντικείμενα των κλάσεων Animal, Pig και Cat. Καλούνται οι μέθοδοι animalSound() για κάθε αντικείμενο, που εμφανίζουν τα αντίστοιχα μηνύματα για τον ήχο που κάνει το κάθε ζώο.

Έτσι, ο κώδικας εμφανίζει τα ακόλουθα μηνύματα στην έξοδο:

The animal makes a sound
The pig says: Oink oink
The cat says: Meow

Κάθε μήνυμα περιγράφει τον ήχο που κάνει το αντίστοιχο ζώο.

Παρακάτω υπάρχει ένα παράδειγμα πολυμορφισμού και δύο αντικείμενα Pig και Dog:

// Αυτή είναι μια κλάση Animal
class Animal {
  public void animalSound() {
    System.out.println("The animal makes a sound"); // Εκτύπωση μηνύματος για τον ήχο που κάνει το ζώο
  }
}

// Αυτή είναι μια υποκλάση της κλάσης Animal, ένα γουρούνι
class Pig extends Animal {
  public void animalSound() {
    System.out.println("The pig says: Oink oink"); // Εκτύπωση μηνύματος για τον ήχο που κάνει το γουρούνι
  }
}

// Αυτή είναι μια υποκλάση της κλάσης Animal, ένα σκυλί
class Dog extends Animal {
  public void animalSound() {
    System.out.println("The dog says: Bark bark"); // Εκτύπωση μηνύματος για τον ήχο που κάνει το σκυλί
  }
}

// Αυτή είναι η κλάση Main που περιέχει τη μέθοδο main()
public class Main {
  public static void main(String[] args) {
    Animal myAnimal = new Animal();  // Δημιουργία αντικειμένου Animal
    Animal myPig = new Pig();  // Δημιουργία αντικειμένου Pig
    Animal myDog = new Dog();  // Δημιουργία αντικειμένου Dog
    
    System.out.println("Animals and their sounds:");  // Εμφάνιση μηνύματος στα αγγλικά
    myAnimal.animalSound();  // Κλήση της μεθόδου animalSound() για το αντικείμενο Animal
    myPig.animalSound();  // Κλήση της μεθόδου animalSound() για το αντικείμενο Pig
    myDog.animalSound();  // Κλήση της μεθόδου animalSound() για το αντικείμενο Dog
  }
}

Ο παραπάνω κώδικας περιέχει τρεις κλάσεις: Animal, Pig και Dog. Η κλάση Animal είναι η γονική κλάση και περιέχει μια μέθοδο με το όνομα animalSound(), η οποία εκτυπώνει το μήνυμα “The animal makes a sound”.

Οι κλάσεις Pig και Dog είναι υποκλάσεις της κλάσης Animal και κληρονομούν τη μέθοδο animalSound(). Ωστόσο, καθεμία από αυτές τις κλάσεις έχει υλοποιήσει τη μέθοδο animalSound() με δικό της τρόπο. Η κλάση Pig εκτυπώνει το μήνυμα “The pig says: Oink oink”, ενώ η κλάση Dog εκτυπώνει το μήνυμα “The dog says: Bark bark”.

Στην κλάση Main, η μέθοδος main() δημιουργεί αντικείμενα τύπου Animal, Pig και Dog. Στη συνέχεια, εμφανίζει το μήνυμα “Animals and their sounds:”, και καλεί τη μέθοδο animalSound() για κάθε αντικείμενο, προκαλώντας την εμφάνιση του αντίστοιχου ήχου που κάνει το ζώο.

14 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων