Назад к вопросам
Middle
70
questionbank

Какие механизмы реализации полиморфизма существуют в Java?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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("Animal makes a sound");
        }
    }
    
    class Dog extends Animal {
        // Переопределение метода sound
        @Override
        public void sound() {
            System.out.println("Dog barks");
        }
    }
    
    class Cat extends Animal {
        // Переопределение метода sound
        @Override
        public void sound() {
            System.out.println("Cat meows");
        }
    }
    
  • Ссылки на суперкласс / интерфейс: Объекты подклассов могут быть присвоены ссылкам суперклассов или интерфейсов, которые они реализуют. Это позволяет обрабатывать объекты разных типов единообразно через общую ссылку. Вызов переопределенного метода через такую ссылку приводит к выполнению версии метода из фактического типа объекта.

    Animal myAnimal = new Dog(); // Присваивание объекта Dog ссылке типа Animal
    myAnimal.sound(); // Вызывается переопределенный метод sound() из класса Dog