Разъяснение по перегрузке - PullRequest
5 голосов
/ 18 августа 2011

Когда у родительского класса есть метод add с 2 параметрами, если мы добавим новый метод add с 3 параметрами в дочерний класс, мы будем называть это перегрузкой?

Заранее спасибо.

Ответы [ 6 ]

6 голосов
/ 18 августа 2011

Да, поскольку метод с двумя параметрами наследуется подклассом, метод с тремя параметрами называется методом перегрузки.

class A
    add(param1, param2)

class B
    add(param1, param2)            <-- inherited
    add(param1, param2, param3)    <-- overloading the above method

Цитата из официального следа Методы переопределения и сокрытия :

Примечание. В подклассе вы можете перегрузить методы, унаследованные от суперкласса .Такие перегруженные методы не скрывают и не переопределяют методы суперкласса - это новые методы, уникальные для подкласса.

(Как вы, наверное, уже поняли, метод с тремя классами не является переопределениемметод.)

5 голосов
/ 18 августа 2011

Да, это перегрузка.Это было бы перегрузкой, даже если бы метод находился в том же классе, что и метод с двумя параметрами.

Обратите внимание, что при разном количестве параметров (и без параметров varargs) перегрузка является достаточно простой.Это становится намного сложнее, когда у вас есть методы с одинаковым количеством параметров - в этот момент компилятор должен выбрать «лучший» метод из возможных методов-кандидатов.

Также обратите внимание, что перегрузка определяется во время компиляции, тогда как то, какое переопределение выполняется, определяется во время выполнения на основе фактического типа объекта, для которого вызывается метод.

3 голосов
/ 18 августа 2011

Перегрузка происходит, когда методы имеют одинаковые имена, но разные подписи. Переопределение - когда методы имеют ИДЕНТИЧНЫЕ ИМЕНА и ИДЕНТИЧНУЮ ПОДПИСЬ.

2 голосов
/ 18 августа 2011

Да, безусловно, перегрузка и приятная особенность наследования.

1 голос
/ 18 августа 2011

Если имя метода уже существует, но параметры отличаются, то да, это перегрузка.

0 голосов
/ 18 августа 2011

да ... это метод перегрузки, даже если метод находится в том же классе.

ps: я предполагаю, что новый метод с тремя параметрами имеет идентичное имя и тип возвращаемого значения

...