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