Перегрузка возникает, когда два или более методов в одном классе имеют одинаковое имя метода, но разные параметры.
Переопределение происходит, когда два методы имеют то же имя метода и параметры. Один из методов находится в родительском классе, а другой — в дочернем. Переопределение позволяет дочернему классу предоставлять конкретную реализацию метода, который уже присутствует в его родительском классе.
Два приведенных ниже примера иллюстрируют их различия:
В таблице ниже показаны их основные различия:
-
В классе должно быть как минимум два метода с одинаковым именем.
-
Должен иметь различие различное количество параметров.
-
Если количество параметров одинаковое, то оно должно иметь разные типы параметров.
-
Перегрузка известна как полиморфизм времени компиляции .
-
Должен быть хотя бы один метод с тем же именем в родительском и дочернем классах.
-
Должно иметь одинаковое количество параметров.
-
Должны иметь одинаковые типы параметров.
-
Переопределение известно как полиморфизм времени выполнения .
Примеры кодов
Переопределение
Взгляните на код ниже:
class Dog {public void bark () {System.out.println ("woof"); }} class Hound расширяет Dog {public void sniff () {System.out.println ("sniff"); } public void bark () {System.out.println ("чаша"); }} class OverridingTest {public static void main (String [] args) {Dog dog = new Hound (); собака. лаять(); }}
В этом переопределении , переменная dog
объявлена как Dog
. Во время компиляции компилятор проверяет, имеет ли класс Dog
метод bark ()
. Пока в классе Dog
есть метод bark ()
, код компилируется. Во время выполнения создается Hound
и назначается dog
, поэтому он вызывает bark ()
метод Hound
.
Перегрузка
Взгляните на код ниже:
class Dog {public void bark () {System.out.println ("woof"); }//метод перегрузки public void bark (int num) {for (int i = 0; i
В этом примере с перегрузкой два лают
методы можно вызывать с разными параметрами. Компилятор знает, что они разные, потому что у них разные сигнатуры методов (имя метода и список параметров метода).