Введение в перегрузку и переопределение в Java

Давайте сначала посмотрим, что предлагает название на первый взгляд. «Перегрузка» означает: возлагать дополнительную нагрузку на чью-либо оригинальную функциональность, верно? Принимая во внимание, что «Переопределение» означает: предоставление новых функций в дополнение к чьей-либо оригинальной функциональности. В этой статье мы подробно рассмотрим Перегрузку и Переопределение в Java. Да, в Java они также реализованы программным способом. Давайте посмотрим на это один за другим.

Перегрузка в Java

Когда у Java-класса есть несколько методов с одним и тем же именем, но с разными аргументами, мы называем это «Перегрузка метода». Сохраняя имя таким же, мы просто увеличиваем читаемость программного кода. Например, предположим, что нам нужно выполнить некоторую операцию сложения для некоторых заданных чисел. Допустим, наш метод называется «сложение ()». Здесь сложение может быть сделано между двумя числами, тремя числами или более. Следовательно, в зависимости от того, сколько чисел будет задействовано в операции сложения, мы можем изменить аргументы (или параметры) функции. Но вместо этого, если вы напишете разные методы для разного количества аргументов, будет трудно распознать, как будет отличаться имя. Следовательно, путем перегрузки мы достигаем лучшей читаемости нашего кода. Итак, теперь вопрос в том, как мы добьемся перегрузки?

Давайте посмотрим на них по одному с примерами кодов.

Способ № 1 - путем изменения количества параметров

Итак, здесь мы сделаем операцию сложения на некоторых числах. Для этого давайте создадим класс с именем «AdditionOperation». Внутри этого класса давайте создадим два метода с именем «71 (дополнение »). В одном из этих методов мы выполним сложение двух чисел. В другом мы будем выполнять сложение трех чисел. Этого мы добьемся, просто изменив число параметров в этих методах, но имя останемся прежним. Таким образом, мы перегружаем метод «добавление ()» здесь.

Код:

public class AdditionOperation (
static int addition(int num1, int num2)(return num1+num2;) //function declarationand definition for addition of two numbers
static int addition(int num1, int num2, int num3)(return num1+num2+num3;) //function declarationand definition for addition of three numbers
public static void main(String args()) (
system.out.printin(addition(35, 36)); //method overloading
system.out.printin(addition(35, 36, 37)); //method overloading, we are calling same methods but for different number of arguments.
)
)

Выход:

Метод № 2 - путем изменения типа данных

Итак, здесь мы сделаем операцию сложения для разных типов, например, между целочисленным типом и между двойным типом. Для этого давайте создадим класс с именем «AdditionOperation». Внутри этого класса у нас есть два метода, называемые «добавление ()». В одном из этих методов мы выполним сложение двух целых чисел. В другом мы будем выполнять сложение двух двойных. Этого мы добьемся, просто изменив тип параметров в этих методах, но оставим имя прежним. Таким образом, мы перегружаем метод «добавление ()» здесь.

Код:

public class additionOperation (
static int addition(int num1, int num2)(return num1+num2;) //function declarationand definition for addition of two numbers
static double addition(double num1, num2)(return num1+num2;) //function declarationand definition for addition of three numbers
public static void main(String args()) (
system.out.printin(addition(35, 36)); //method overloading
system.out.printin(addition(35.5, 36.6)); //method overloading, we are calling same methods but for different type of arguments.
)
)

Выход:

Точки, которые следует отметить при перегрузке

  • Перегрузка в Java - это «перегрузка polymMethod во время компиляции в C # orphism». Полиморфизм времени компиляции в Java также называется «Статический метод Dispatch» или «Раннее связывание». Так что я подразумеваю под этим жаргоном?
  • Полиморфизм, как следует из названия, в основном является способностью принимать различные формы (poly: many, morph: form). Итак, здесь связывание или связывание перегруженной функции и объекта выполняется во время компиляции. Следовательно это называется полиморфизмом времени компиляции.
  • По сути, здесь привязка функции к объекту выполняется раньше, чем во время выполнения (т. Е. Во время компиляции), поэтому она также называется «Раннее связывание».
  • Статическая диспетчеризация - это тип полиморфизма или диспетчеризации метода, который сообщает, как java выберет, какие функциональные возможности метода будут использоваться во время компиляции. (Я имею в виду, будет ли он выполнять сложение двух или трех чисел в нашем примере кодирования). Так что имя также известно как статический метод Dispatch.

Переопределение в Java

  • Когда у подкласса java или дочернего класса есть метод, который имеет то же имя и содержит те же параметры или аргументы и аналогичный тип возврата, что и метод, который присутствует в его суперклассе или родительском классе, тогда мы можем вызвать метод дочернего класса как переопределенный метод метода его родительского класса.
  • Например, предположим, что нам нужно выполнить некоторую операцию отображения в соответствии с типом класса. Я имею в виду, если я вызову метод родительского класса, он отобразит сообщение, которое определено в родительском классе. Но когда мы вызываем метод дочернего класса, он переопределяет отображаемое сообщение своего родительского класса и отображает отображаемое сообщение, которое определено внутри метода дочернего класса. Следовательно, в зависимости от того, какое отображение нам нужно показать, мы можем вызвать связанный класс (родительский или дочерний). Здесь мы не меняем имя метода, аргумент и тип возвращаемого значения. Мы просто меняем функциональность метода в дочернем классе. Но вместо этого, если мы не делаем переопределение, т.е. мы не даем конкретную реализацию дочернего метода, то при вызове метода он отобразит то же сообщение, что и в родительском классе.
  • При написании кода мы будем использовать аннотацию @ Override перед переопределением метода. Аннотация @Override сообщает компилятору, что метод должен переопределять метод, который был объявлен в суперклассе. Хотя это не обязательно использовать, это помогает предотвратить ошибки. Если метод, аннотированный @Override, не может переопределить метод, компилятор выдает ошибку.

Правила для переопределения метода Java

  1. Метод должен иметь то же имя, что и в родительском классе
  2. Метод должен иметь тот же параметр, что и в родительском классе.
  3. Должны быть отношения IS-A (наследование).

Код:

//Parent or Super class
class Parent (
public void display() (
system.out.printin("Hello, I am from parent class");
)
)
//Child or sub class
class Sub extends Parent (
//Below method overrides the Parent display() method
// @override
public void display() (
system.out.printin("Hello, I am from child class");
)
)
//Driver class
public class Overriding (
public static void main?(String args())
(
Parent superObject = new Parent ();
superObject.display(); // Super class method is called
Parent subObject = new Sub();
subObject.display(); //Child class method is called by a parent type reference: this is functionality of method overriding
Sub subObject2 = new Sub(); //Child class method is called by a child type reference
subObject2.display();
)
)

Выход:

Ограничения в методе Overriding:

  1. Закрытые методы родительского класса не могут быть переопределены.
  2. Конечные методы не могут быть переопределены
  3. Статические методы не могут быть переопределены

Очки, которые следует отметить за переопределение

  • Перегрузка в Java - это «полиморфизм времени выполнения». Полиморфизм времени выполнения в Java также называется «Динамический метод Dispatch» или «Позднее связывание». Так что же означает этот жаргон?
  • Полиморфизм, как следует из названия, в основном является способностью принимать различные формы (poly: many, morph: form). Итак, здесь вызов перегруженной функции с объектом выполняется во время выполнения. Следовательно, называется полиморфизмом времени выполнения.
  • По сути, здесь привязка функции к объекту выполняется поздно, то есть после компиляции (т.е. во время выполнения); следовательно, он также называется «Позднее связывание».
  • Динамическая диспетчеризация - это тип полиморфизма или диспетчеризации метода, который сообщает, как java выберет, какие функциональные возможности метода будут использоваться во время выполнения. Так что имя также известно как Динамический метод Dispatch.

Вывод

На этом мы завершаем изучение темы «Перегрузка и переопределение в Java». Напишите коды, упомянутые в приведенных выше примерах, в компиляторе java и проверьте вывод. Изучение кодов будет неполным, если вы сами не будете заниматься практикой, поскольку это улучшит ваши навыки кодирования. Удачного кодирования!

Рекомендуемые статьи

Это руководство по перегрузке и переопределению в Java. Здесь мы обсуждаем методы в Overloading вместе с правилами и ограничениями Overriding в Java. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -

  1. Переопределение в JavaScript
  2. Переопределение в ООП
  3. Что такое дженерики в Java?
  4. Переопределение в PHP
  5. Перегрузка Python
  6. Наследование в PHP
  7. Полное руководство по наследованию в Python
  8. Перегрузка и переопределение в C #
  9. Типы и обработка ошибок в JavaScript
  10. Примеры и как работают дженерики в C #
  11. Функция и правила переопределения в Python