ABAP Objects — концепт друзей

В объектно-ориентированных языках доступ к приватным или защищенным методам или атрибутам должен быть запрещен. Если кто либо попытается к ним обратиться то компилятор выдаст ошибку. Однако иногда нам необходимо получить к ним доступ, в ABAP это возможно с помощью использования концепции «друзей».

Использование данной концепции возможно с помощью ключевого слова FRIENDS в атрибуте класса. В следующем примере показан класс lcl_me который определяет в качестве друга класс lcl_friend. У класса lcl_friend создан метод access_a1_of_class1 который выводит переменную из области видимости PRIVATE класса lcl_me.

Таким образом класс lcl_friend получает неограниченный доступ к lcl_me. Все классы наследуемые от lcl_friend будут так же иметь доступ ко все приватным атрибутам lcl_me:

Кроме того в качестве «друга» мы можем обозначить интерфейс. Все классы которые реализуют данный интерфейс будут иметь такой же доступ если бы они сами были «друзьями».

Однако наследуемые классы от lcl_me не будут являться друзьями класса lcl_friend. Другими словами дружба не наследуется напрямую, она создается в определении класса.

Доступ к приватным данным CL_GUI_ALV_GRID

Благодаря тому что интерфейс IF_ALV_RM_GRID_FRIEND в CL_GUI_ALV_GRID объявлен как интерфейс друга, любой Ваш класс реализующий данный интерфейс получит доступ к приватным данным объектов этого класса.

Доступ к приватным данным можно так же получить передав их по ссылке.

Оригинал статьи