Не понял последнюю задачу, хоть и решил. В классе Solution объявили статические переменные city и population. Эти переменные видны всем методам этого класса. Внутри класса можем обращаться к ним по их именам без указания класса. Тогда почему в методах мы снова объявляем переменные такого типа и с таким именем? И почему здесь нет ошибки? Из теории: "Переменные класса - это переменные, объявленные не в методе, а в классе. К ним можно обращаться из любого метода класса. Грубо говоря переменные класса - это общие переменные для всех методов класса". В примере со Storage понятно почему мы указываем класс с точкой, т.к. обращаемся из другого класса. А в нашем примере с Solution не понятно, т.к. всё внутри одного класса.
Maksim
10 уровень
Видимость переменных
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
AleosExpert
1 июня 2023, 14:00
Просто учебный пример. В методе если ты объявляешь переменную с таким же именем как и статическая переменная, то последняя будет в ее "тени". Ты не сможешь получить к ней доступ обращаясь просто по имени, только через имя класса. Это хорошая практика обращаться к статическим переменным через имя класса.
+3
Maksim
1 июня 2023, 14:18
То есть к статической переменной лучше всегда обращаться с указанием класса, даже если внутри этого класса? Например, у нас может быть тысяча методов в классе, и где-нибудь да и будет с таким же именем объявлена. Или вне такого метода, где переменная с таким же именем, наша статическая переменная снова указывается без названия класса?
0
AleosExpert
1 июня 2023, 15:08
Могут быть нюансы при наследовании, когда у тебя совпадают имена статических переменных или методов. Разберешься позже с этим. Переменная класса достаточно важная, обращаясь к ней через имя класса ты повышаешь читаемость кода и минимизируешь вероятность появления ошибки - я думаю, что это хорошая привычка. Но ничего страшного, если ты будешь делать по своему - это твой опыт)
+2
Алексей Михайлов
1 июня 2023, 13:55
если ты обращаешья к статической переменной изнутри класса и она не перекрыта локальной переменной, то можно писать её без имени класса.
пример:
+4
Maksim
1 июня 2023, 14:10
То есть получается из примера, что после еще одного объявления в методе main переменной name, у нас теперь 2 переменные внутри метода main: name и Program.name? А в другом методе (если нет такого же объявления как в main) наша статическая переменная снова будет просто name? Или проще уже указывать нашу переменную-поле всегда с именем класса даже если внутри него?
0
Алексей Михайлов
1 июня 2023, 14:50
да именно так
поэтому чтобы не путаться к статическим переменным обращаться лучше через имя класса так код более читабельный становится
+2