Задать вопрос
@SaintRepublic
Дайте мне какое-нибудь дело, мне скучно!!! ;D

Как скрыть метод класса Java?

Собственно, как скрыть/сделать не доступными некоторые методы класса?
Например, перезаписанные public методы класса-родителя:
public class MyLayout extends FrameLayout {

    public MyLayout(Context context) {
        super(context);
    }

    /**
     * КАК СДЕЛАТЬ ЭТОТ МЕТОД НЕДОСТУПНЫМ / ИЗМЕНИТЬ ВИДИМОСТЬ ???
     */
    @Override
    public void addView(View child) {
        super.addView(child);
    }
}

В C#, видел, делали что-то такое:
//Вот это
public override string ToString() {}

//Меняли на это
private new string ToString() {}

А как в java сделать подобное никак не найду. Причем в Android Studio в классах библиотек, вот например Context, есть скрытые методы, которые выглядят так:
/** @hide */
public boolean isAutofillCompatibilityEnabled() {
    return false;
}

И, соответственно, этот метод не видим, хоть и public.
Отсюда и вопросы: как это сделано и как сделать так же?

И что это вообще за теги в комментариях (@hide, {@link } и т.п.)? Если пишу так же - говорит неизвестный тег.
  • Вопрос задан
  • 847 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
thelongrunsmoke
@thelongrunsmoke
Программист
В рамках Java, изменить видимость унаследованного метода нельзя. Вариантов несколько. Во-первых, можно оставить переопределение метода пустым и перенести функционал в другое место. Во-вторых, сделать правильно, вам нужна дополнительная инкапсуляция, так и используйте инструменты языка, создайте интерфейс, который предлагает только необходимые методы.
Аннотации в комментариях, внутри Android API, имеют иной смысл. Например, @hide говорит, что метод не проектировался для использования вне API.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Alexey2222
В крайнем случае вы можете сделать его просто пустым. Т.е., с пустым телом.
Ответ написан
Хочется добавить, что в java таки изменить видимость унаследованного метода можно, но только в сторону расширения. Сузить же действительно нельзя — это было бы нарушением принципа Барбары Лисков.

А теги в комментариях это разметка javadoc. И подобные комментарии — это не комментарии вовсе, а документация.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы