Другие языки программирования и технологии
Вопрос про полиморфизм.
Зачем переопределять метод из основного класса в класс наследник, если там разная реализация все рано, почему просто не написать новый метод. Учу java
Потому что на работе пишуьют огромные программы. Представь себе код миллиона два строк и нужно как ты говоришь повторяться
Полиморфизм используется для переопределения поведения некотороко родительского класса, который можно условно назвать прототипом (не путать с настоящими прототипами). Т. е. если имеется куча методов работы с родительским классом, можно будет их использовать и для дочерних, хотя эти самые дочерние могут вести себя немножко иначе.
Например, есть класс Ведро и его метод ОчиститьВедро.
Вполне вероятно, что наследники класса Ведро - ПожарноеВедро и МусорноеВедро - будут реализовывать этот метод несколько по-разному. Но если мне, блин, надо ОчиститьВедро, причем плевать - какое именно, то я могу смело пользоваться методом ОчиститьВедро, не особенно заботясь, что при этом произойдет с этими ведрами и их содержимым, а главное - мне даже не надо знать, какое именно ведро я очищаю.
Вообще, полиморфизм часто подвергается критике адептами "чистого кода" - мол, вызывая метод невозможно предугадать, что же случится, что чревато всяческими ошибками и накладками. На что адепты полиморфизма им отвечают, что нехрен фотоаппаратом гвозди забивать и использовать полиморфизм для стрельбы в ногу. Такой вот вечный срачик.
Например, есть класс Ведро и его метод ОчиститьВедро.
Вполне вероятно, что наследники класса Ведро - ПожарноеВедро и МусорноеВедро - будут реализовывать этот метод несколько по-разному. Но если мне, блин, надо ОчиститьВедро, причем плевать - какое именно, то я могу смело пользоваться методом ОчиститьВедро, не особенно заботясь, что при этом произойдет с этими ведрами и их содержимым, а главное - мне даже не надо знать, какое именно ведро я очищаю.
Вообще, полиморфизм часто подвергается критике адептами "чистого кода" - мол, вызывая метод невозможно предугадать, что же случится, что чревато всяческими ошибками и накладками. На что адепты полиморфизма им отвечают, что нехрен фотоаппаратом гвозди забивать и использовать полиморфизм для стрельбы в ногу. Такой вот вечный срачик.
Потому что этот метод выполняет ту же задачу. Ты в любом случае будешь обращаться в коде к этому методу, независимо от его реализации. Ты можешь в массив положить разные объекты, пройтись по нему в цикле и вызвать этот метод. В противном случае тебе понадобится дополнительная логика, if'ы и прочий мусор. Например, ты можешь определить для прямоугольника метод Draw, а также для круга. Глупостью было бы делать два метода DrawRect, DrawCircle.
Потому, что то, что ты можешь использовать предка в качестве типа для потомка. Если ты просто напишешь новый метод, то то, что будет вызывать его методы не узнает о твоём новом методе.
логично, но не последовательно... смени приоритеты
Похожие вопросы
- Вопрос про полиморфизм в С++.
- Инкапсуляция, полиморфизм Обясните по проще что такое инкапсуляция и полиморфизм?
- Можете объяснить мне в простых терминах ну или с коротким примером Полиморфизм?
- Вопрос по ООП. Инкапсуляция, наследие, полиморфизм. Как понять все это чудо?
- Как полиморфизм модефецирует принцип наследования?
- объясните глупой что такое полиморфизм в с++.скока всего прочла и так и не могу понять((((
- Что такое полиморфизм? Только можно на примере а не теорию?
- ООП: что такое инкапсуляция, абстракция, полиморфизм и наследование?
- Обьясьните пожалуйста кто-нибудь, что такое "Полиморфизм"и "Инкапсуляция"
- что такое полиморфизм?