Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

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

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

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

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Αυτή είναι μια κλάση 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 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
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() για κάθε αντικείμενο, που εμφανίζουν τα αντίστοιχα μηνύματα για τον ήχο που κάνει το κάθε ζώο.

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
The animal makes a sound
The pig says: Oink oink
The cat says: Meow
The animal makes a sound The pig says: Oink oink The cat says: Meow
The animal makes a sound
The pig says: Oink oink
The cat says: Meow

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// Αυτή είναι μια κλάση 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 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
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 !!
Μετάβαση σε γραμμή εργαλείων