Ποια μηχανισμοί υλοποίησης πολυμορφισμού υπάρχουν στη Java;
sobes.tech AI
Απάντηση από AI
-
Πολυμορφισμός χρόνου μεταγλώττισης (στατικός πολυμορφισμός): Υλοποιείται μέσω υπερφόρτωσης μεθόδων (method overloading). Οι μέθοδοι έχουν το ίδιο όνομα, αλλά διαφορετικές υπογραφές (αριθμό, τύπο ή σειρά ορισμάτων).
class Calculator { // Υπερφόρτωση της μεθόδου add public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } } -
Δυναμικός πολυμορφισμός (χρόνος εκτέλεσης): Υλοποιείται μέσω υπερκάλυψης μεθόδων (method overriding). Η μέθοδος στην υποκλάση έχει την ίδια υπογραφή με αυτή στην υπερκλάση και παρέχει τη δική της υλοποίηση. Η απόφαση ποια μέθοδος θα κληθεί λαμβάνεται κατά την εκτέλεση, ανάλογα με τον πραγματικό τύπο του αντικειμένου.
class Animal { public void sound() { System.out.println("Το ζώο κάνει ήχο"); } } class Dog extends Animal { // Υπερκάλυψη της μεθόδου sound @Override public void sound() { System.out.println("Ο σκύλος γαβγίζει"); } } class Cat extends Animal { // Υπερκάλυψη της μεθόδου sound @Override public void sound() { System.out.println("Η γάτα νιαουρίζει"); } } -
Αναφορές σε υπερκλάση / διεπαφή: Τα αντικείμενα υποκλάσεων μπορούν να ανατεθούν σε αναφορές υπερκλάσεων ή διεπαφών που υλοποιούν. Αυτό επιτρέπει την ομοιόμορφη επεξεργασία αντικειμένων διαφορετικών τύπων μέσω μιας κοινής αναφοράς. Η κλήση μιας υπερκαλυμμένης μεθόδου μέσω τέτοιας αναφοράς οδηγεί στην εκτέλεση της έκδοσης της μεθόδου από τον πραγματικό τύπο του αντικειμένου.
Animal myAnimal = new Dog(); // Ανάθεση ενός αντικειμένου Dog σε αναφορά τύπου Animal myAnimal.sound(); // Κλήση της υπερκαλυμμένης μεθόδου sound() από την κλάση Dog