Основное различие : перегрузка означает наличие двух методов одного и того же класса с одинаковым именем и с разными типами параметров, тогда как переопределение означает наличие двух разных методов в одном классе с одинаковыми типами параметров, но с разными реализациями.
Переопределение и перегрузка методов - это две концепции или техники, используемые в языках программирования Java. Обе концепции позволяют программисту предоставлять разные реализации для методов под одним и тем же именем. В этой статье проводится различие между двумя концепциями программирования.
Перегрузка функций или перегрузка методов позволяет создавать несколько методов под одним и тем же именем, в одном классе, но отличаться друг от друга во входном и выходном типах функции. Это просто определяется как способность одной функции выполнять разные задачи.
При перегрузке реализации метода имеют одно и то же имя, потому что они выполняют похожие задачи. Также перегрузка считается полиморфной по своей природе. Функции, имеющие разные реализации, зависят от указанных типов аргументов. Обычно это связано со статическими языками программирования, которые обеспечивают проверку типов в вызовах функций. Это также считается практичным, поскольку позволяет программисту писать несколько разных методов в одном классе. Однако при перегрузке процессор во время выполнения меняет имя всех перегруженных методов, что может быть проблемой.
Переопределение метода в объектно-ориентированном программировании - это функция, которая позволяет подклассу или дочернему классу предоставлять конкретную реализацию метода, которая уже предоставлена одним из его суперклассов или родительских классов. Реализация в подклассе переопределяет или заменяет реализацию в родительском классе, предоставляя метод с тем же именем, теми же параметрами или сигнатурой и тем же типом возврата, что и метод в родительском классе.
При переопределении метода функции кодируются для выполнения определенных задач в программе. Переопределение зависит от наличия функции базового класса для ее появления. Здесь выполняемая функция определяется объектом, который используется для ее вызова, т.е. если для вызова метода используется объект родительского класса, то будет выполняться функция в родительском классе. Переопределение имеет полиморфный характер; это помогает разрабатывать программы на основе первого неявного параметра, который может быть разрешен во время выполнения. В Java есть несколько языков, позволяющих программисту предотвращать переопределение метода.
Сравнение между перегрузкой и переопределением:
перегрузка | Переопределение | |
Определение | Это означает наличие методов одного и того же класса под одним и тем же именем, но каждый метод имеет разные параметры или одинаковые параметры с разными типами и порядком. | Это означает наличие подкласса с теми же методами под тем же именем и точно таким же типом параметров и тем же типом возврата, что и у суперкласса. |
Имея в виду | Это означает, что более одного метода имеют одно и то же имя в одном классе, но имеют разные сигнатуры. | Это означает, что метод базового класса переопределяется в производном классе с той же сигнатурой. |
Поведение | Это добавляет или расширяет методы поведения. | Это изменяет существующее поведение метода. |
Полиморфизм | Это полиморфизм времени компиляции. | Это полиморфизм во время выполнения. |
Статический метод | Статический метод может быть перегружен. | Статический метод не может быть переопределен. |
облигация | Статическая связь. | Динамическая связь. |
наследование | Это может или не может требовать наследования. | Это всегда требует наследования. |
ассоциация | Обычно это связано со статическими языками программ. | Обычно это связано с объектно-ориентированными программами. |
Подпись | Методы имеют разные подписи. | Методы должны иметь одинаковую подпись. |
скорость | Это быстрее, чем переопределение. | Это медленный по сравнению с перегрузкой. |
Классы | Для перегрузки не требуется более одного класса. | Требуется как минимум два класса для перегрузки. |
уровень | Методы могут иметь любой уровень доступа. | Методы имеют одинаковый или широкий уровень доступа. |
пример | Класс Добавить { int sum (int a, int b) { вернуть a + b; } int sum (int a) { вернуть + 10; } } | Класс А // Супер Класс { пустое отображение (int num) { печать номер; } } // Класс B наследует класс A Класс B // Подкласс { пустое отображение (int num) { печать номер; } } |