Другие языки программирования и технологии

Вопрос про полиморфизм.

Зачем переопределять метод из основного класса в класс наследник, если там разная реализация все рано, почему просто не написать новый метод. Учу java
Потому что на работе пишуьют огромные программы. Представь себе код миллиона два строк и нужно как ты говоришь повторяться
Sherzod Turaev
Sherzod Turaev
52 890
Лучший ответ
Полиморфизм используется для переопределения поведения некотороко родительского класса, который можно условно назвать прототипом (не путать с настоящими прототипами). Т. е. если имеется куча методов работы с родительским классом, можно будет их использовать и для дочерних, хотя эти самые дочерние могут вести себя немножко иначе.

Например, есть класс Ведро и его метод ОчиститьВедро.
Вполне вероятно, что наследники класса Ведро - ПожарноеВедро и МусорноеВедро - будут реализовывать этот метод несколько по-разному. Но если мне, блин, надо ОчиститьВедро, причем плевать - какое именно, то я могу смело пользоваться методом ОчиститьВедро, не особенно заботясь, что при этом произойдет с этими ведрами и их содержимым, а главное - мне даже не надо знать, какое именно ведро я очищаю.

Вообще, полиморфизм часто подвергается критике адептами "чистого кода" - мол, вызывая метод невозможно предугадать, что же случится, что чревато всяческими ошибками и накладками. На что адепты полиморфизма им отвечают, что нехрен фотоаппаратом гвозди забивать и использовать полиморфизм для стрельбы в ногу. Такой вот вечный срачик.
Аркадий Белов
Аркадий Белов
64 402
Потому что этот метод выполняет ту же задачу. Ты в любом случае будешь обращаться в коде к этому методу, независимо от его реализации. Ты можешь в массив положить разные объекты, пройтись по нему в цикле и вызвать этот метод. В противном случае тебе понадобится дополнительная логика, if'ы и прочий мусор. Например, ты можешь определить для прямоугольника метод Draw, а также для круга. Глупостью было бы делать два метода DrawRect, DrawCircle.
ИШ
Игорь Шиляев
55 141
Потому, что то, что ты можешь использовать предка в качестве типа для потомка. Если ты просто напишешь новый метод, то то, что будет вызывать его методы не узнает о твоём новом методе.
Бог =)))
Бог =)))
18 693
логично, но не последовательно... смени приоритеты