Сервис вопросов и ответов

Ответы

  1. Эдита Беспалова

    Полиморфизм – фундаментальная концепция объектно-ориентированного программирования, позволяющая объектам разных классов обрабатываться единообразно. В переводе с греческого означает ‘много форм’. Это достигается за счет нескольких механизмов.

    • Перегрузка методов (Method Overloading): Позволяет определять несколько методов в одном классе с одинаковым именем, но разными параметрами. Компилятор выбирает подходящий метод на основе типов и количества аргументов, переданных при вызове. Например:
    • class Calculator { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } } Calculator calc = new Calculator(); int sumInt = calc.add(5, 3); // Вызов первого add() double sumDouble = calc.add(2.5, 1.7); // Вызов второго add() 
    • Переопределение методов (Method Overriding): Происходит в иерархии наследования. Подкласс может переопределить метод, унаследованный от суперкласса, предоставив свою собственную реализацию. При вызове этого метода на объекте подкласса будет выполнена именно его версия.
    • class Animal { public void makeSound() { System.out.println('Generic animal sound'); } } class Dog extends Animal { @Override // Рекомендация для ясности, не обязательна public void makeSound() { System.out.println('Woof!'); } } Animal myDog = new Dog(); myDog.makeSound(); // Выведет 'Woof!' 
    • Полиморфизм через интерфейсы (Interface Polymorphism): Интерфейс определяет набор методов, которые должны быть реализованы классами, реализующими этот интерфейс. Это позволяет создавать объекты разных классов и обрабатывать их единообразно через переменную типа интерфейса.
    • interface Shape { double getArea(); } class Circle implements Shape { private double radius; public Circle(double radius) { this.radius = radius; } @Override public double getArea() { return Math.PI * radius * radius; } } class Rectangle implements Shape { private double width; private double height; public Rectangle(double width, double height) { this.width = width; this.height = height; } @Override public double getArea() { return width * height; } } Shape[] shapes = new Shape[2]; shapes[0] = new Circle(5); shapes[1] = new Rectangle(4, 6); double totalArea = 0; for (Shape shape : shapes) { totalArea += shape.getArea(); } 
    • Полиморфизм через абстрактные классы (Abstract Class Polymorphism): Аналогичен полиморфизму через интерфейсы, но с возможностью предоставления частичной реализации в абстрактном классе.

    В каждом из этих случаев достигается гибкость и расширяемость кода. Полиморфизм позволяет писать код, который может работать с объектами разных типов без необходимости знать их конкретный тип во время компиляции.

    Ответить
Добавить комментарий