Sobes.tech
Middle

Ποια μηχανισμοί υλοποίησης πολυμορφισμού υπάρχουν στη 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