What is variable shadowing used for in a Java class?
Для чего используется затенение переменных в классе Java?
Я читаю свою книгу Deitel "Java Как программировать" и наткнулся на термин "затенение". Если затенение разрешено, в какой ситуации или с какой целью оно используется в классе Java?
Основная цель затенения - отделить локальный код от окружающего класса. Если он недоступен, рассмотрим следующий случай.
Выпущен класс Foo в API. В вашем коде вы создаете его подкласс, а в вашем подклассе используете переменную с именем bar . Затем Foo выпускает обновление и добавляет в свой класс защищенную переменную с именем Bar.
Теперь ваш класс не будет запускаться из-за конфликта, который вы не могли предвидеть.
Однако не делайте этого специально. Позволяйте этому происходить только тогда, когда вам действительно наплевать на то, что происходит за пределами области видимости.
Ответ 2
Это может быть полезно для установщиков, где вы не хотите создавать отдельное имя переменной только для параметра метода, например:
publicvoidsetX(int x) { this.x = x; }
Кроме того, я бы избегал их.
Ответ 3
Одна из основных целей - запутать людей. Это плохая практика, и ее следует избегать.
Ответ 4
Затенение на самом деле используется не только в Java. В любом случае, когда переменная, объявленная в области видимости, имеет то же имя, что и переменная в большей области видимости, эта переменная затеняется.
Затенение часто используется, когда у вас есть внутренний и внешний классы и вы хотите поддерживать переменную с тем же именем.
Однако, если вы можете избежать этого, вам следует это сделать, поскольку это может вызвать путаницу.