Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/48: Рейтинг темы: голосов - 48, средняя оценка - 4.96
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
1

Переопределение и перегрузка метода(в чём отличия?)

22.03.2017, 13:26. Показов 9198. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните мне в чём различия между Переопределением и перегрузкой метода?? Ведь по сути это одно и тоже так?
И в каких случаях эти способы используется?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2017, 13:26
Ответы с готовыми решениями:

Перегрузка\переопределение
перегрузка и переопределение стандартных операторов в классе это одно и то же или нет?

Перегрузка или переопределение?
Вопрос: перегрузка это или переопределение? Есть класс, в нем метод public int print(int...

Наследование. Переопределение. Перегрузка
В программе есть подклассы. которые не могу дописать, только начали изучать Java. Буду благодарна...

Полиморфизм/перегрузка/переопределение
class A { void m1(A a) { System.out.print("A"); } } class B extends A { ...

10
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
22.03.2017, 13:38 2
это не одно и то же.
переопределение используется при наследовании, перегрузка при полиморфизме.
1
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
22.03.2017, 13:40 3
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

Maxim09, При перегрузке Вы определяете несколько методов с одинаковой сигнатурой
Java
1
2
3
4
5
6
 int doSmth () {
    return 42;
}
 int doSmth(Integer i) {
    return i + 10;
}
А при переопределении вы просто меняете тело метода у класса наследника
Java
1
2
3
4
5
6
7
8
9
10
11
class A {
    int do(){
    return 0;
}
}
 
class B extends A {
    int do(){
    return 42;
}
}
1
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
22.03.2017, 13:40  [ТС] 4
Цитата Сообщение от DavidKarchikyan Посмотреть сообщение
это не одно и то же.
переопределение используется при наследовании, перегрузка при полиморфизме.
Скажите а когда используется полиморфизм(перегрузка) т.е. я думал что полиморфизм используется при наследовании...
0
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
22.03.2017, 13:50 5
Maxim09, три кита ООП. Почитайте, к примеру, книгу Кэти Сьерра.
1
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
22.03.2017, 13:59 6
Maxim09, Представь у тебя три книги, у всех 3 название Алгебра, только одна с текстом, другая с картинками, и 3 с текстом и картинками. Когда я скажу принеси мне книгу Алгебра, что ты спросишь? КАКУЮ.
вот и три метода
Java
1
2
3
4
5
6
7
8
public void Algebra(Graphic picture) {
}
 
public void Algebra(String text) {
}
 
public void Algebra(Graphic picture, String text) {
}
и вот когда вызываешь метод, то компилятор спрашивает, а тебе КАКУЮ?
1
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
22.03.2017, 14:04 7
Цитата Сообщение от Maxim09 Посмотреть сообщение
Скажите а когда используется полиморфизм(перегрузка) т.е. я думал что полиморфизм используется при наследовании
Полиморфизм никак не связан с таким понятием как перегрузка метода, перегрузка, это, как выше уже было сказано (но не совсем верно), - определение нескольких методов с одинаковым именем. Неверность сказанного выше заключается в том, что меняется сигнатура метода за счет изменения количества/типов/порядка параметров метода, но имя остается таким же.
Ну с override'ом все понятно.
0
64 / 64 / 26
Регистрация: 07.01.2016
Сообщений: 374
22.03.2017, 14:11 8
_ViPeR_,
Параметрический полиморфизм подразумевает исполнение одного и того же кода для всех допустимых типов аргументов, тогда как ad hoc полиморфизм подразумевает исполнение потенциально разного кода для каждого типа или подтипа аргумента
Я бы не сказал, что перегрузка это не полиморфизм.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
22.03.2017, 14:54 9
полиморфизм образуется, когда есть наследование
для перегрузки наследование не нужно

Добавлено через 32 секунды
Цитата Сообщение от DavidKarchikyan Посмотреть сообщение
Я бы не сказал, что перегрузка это не полиморфизм.
т.е. ты заблуждаешься
0
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 305
22.03.2017, 14:55 10
_ViPeR_, все верно, я перепутал. В сигнатуру выходят поступающие значения, но не входит типа выходного.
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
22.03.2017, 15:59 11
DavidKarchikyan
В предложенном выше вами примере с классом Algebra идет перегрузка конструктора, которая никак не повлияет на поведение объекта этого типа. Но вот если, к примеру, унаследоваться от этого класса (например класс Shmalgebra) и переопределить какой-нибудь метод, а затем:
Java
1
Algebra a = new Shmalgebra();
А затем вызвать этот переопределенный метод, будет простейший пример полиморфизма - вызывается метод у объекта типа Algebra, а работать будет код из Shmalgebra.
Я не буду спорить по поводу параметризации, женериков и прочих, уже не относящихся к классическому ООП, фич, поскольку там черта можно такого придумать, что голова лопнет.
0
22.03.2017, 15:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2017, 15:59
Помогаю со студенческими работами здесь

Переопределение метода
Добрый Вечер!!! Объясните Пожалуйста поподробнее, что обозначет: "переопределение метода" ....

Переопределение метода
Не могу переопределить в производном классе метод Change, чтобы изменялось еще и грузоподъемность....

Переопределение метода __format__
Здравствуйте. Может ли кто-нибудь показать пример, или дать ссылку, на пример переопределение...

Переопределение метода GetHashCode()
В МСДН прописано, что если программист решит переопределить метод Equals, то стоит и переопределить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru