Рубрики
Без рубрики

Разрешен ли super.super.method() в Java?

Я столкнулся с этим вопросом в процессе собеседования. Я подумал про себя, что не видел такого использования, и задался вопросом, в чем может быть причина. С тегами java, разработка программного обеспечения, дизайн программного обеспечения, чистый код.

Я столкнулся с этим вопросом в процессе собеседования. Я подумал про себя, что не видел такого использования, и задался вопросом, в чем может быть причина того, что оно запрещено. Я не знал ответа. После собеседования я поискал его и обнаружил, что это действительно запрещено в java, но почему?

В C++ мы можем использовать оператор разрешения области видимости (::) для доступа к любому члену предка в иерархии наследования, но в Java мы можем получить доступ к членам grandparent только через родительский класс.

Итак, возникает вопрос: “Почему super.super.method() не разрешен в Java?”

Потому что это нарушает инкапсуляцию. Инкапсуляция – это принцип объединения кода и данных (переменных) в единое целое. Это одна из четырех фундаментальных концепций ООП. Остальные три – это наследование, полиморфизм и абстракция.

Инкапсуляция часто используется для реализации механизма сокрытия данных. Этот механизм уменьшает доступность атрибутов для текущего класса и использует общедоступные методы getter-setter для контроля и ограничения внешнего доступа к этим атрибутам. Эти методы не только позволяют вам определить, какие атрибуты могут быть прочитаны или обновлены, но также позволяют вам проверить новое значение перед изменением атрибута.

С помощью Инкапсуляции поля класса могут быть доступны только для чтения или только для записи, и класс может иметь полный контроль над тем, что хранится в его полях.

Следовательно, мы не должны иметь возможности обойти поведение родительского класса. Иногда имеет смысл иметь возможность обходить поведение вашего собственного класса (особенно из того же метода), но не вашего родительского!

Например, у нас есть базовая “коллекция предметов”, подкласс, представляющий “коллекцию красных предметов”, и подкласс, представляющий “коллекцию больших красных предметов”.

С помощью super.super.add(элемент)

Хорошо, но почему C++ допускает это?

Когда я искал этот вопрос, я нашел такой ответ: Потому что c++ не волнует, если вы выстрелите себе в ногу:) Я думаю, что основными причинами являются гибкость и тот факт, что C++ предполагает, что мы понимаем, как программировать на пределе байтов и оперативной памяти, в то время как Java предполагает, что мы не знаем, как программировать, а Java не позволяет нам плохо разрабатывать программное обеспечение.

Эта статья была первоначально опубликована на medium:

Разрешен ли super.super.method() в Java? – Вера Галька – Медиум

Инанч Чакыл ・ 27 мая 2020 года ・ 2 минуты чтения Средний

Оригинал: “https://dev.to/inanc/is-super-super-method-allowed-in-java-2kl6”