Объясните, пожалуйста, почему если убрать слово STATIC у метода, то все будет работать с THIS??? Просто все пишут, что к статической переменой можно обратиться только через класс вот так Apple.applesPrice. Но ведь получается и через THIS можно обращаться к статической переменой, в данном случае всё работает если только убрать слово STATIC у метода. Получается что задача акцентируется на методе, а не на том как обратиться к переменой, получается обратиться можно и так и так, все только будет зависеть от метода - статичен он или нет.
public static class Apple {
public static int applesPrice = 0; // ПЕРЕМЕННАЯ СТАТИЧНА
public static void addPrice(int applesPrice) { // МЕТОД СТАТИЧЕН
this.applesPrice = this.applesPrice + applesPrice; // ИДЕЯ РУГАЕТСЯ НА СЛОВО THIS, ЕСЛИ УБРАТЬ СЛОВО STATIC У МЕТОДА, ТО ВСЁ РАБОТАЕТ ХОРОШО
}
}
hidden #2062118
10 уровень
Почему работает если убрать слово STATIC у метода???
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артем Дышлюк
1 мая 2019, 10:05
Ключевое слово this это ссылка объекта самого на себя. Статический метод - это метод класса, а не объекта, мы можем его вызывать у класса не имея объекта, соответственно и ссылки на себя у него может не быть. Когда вы убираете static у метода, то он становится методом объекта, т.е. мы его можем вызвать только у созданного объекта, поэтому и ссылка на себя у него точно будет. Надеюсь понятно объяснил.
0
hidden #2062118
1 мая 2019, 10:23
получается что если метод не статичный, то можно же обратиться через THIS к статичной переменой внутри метода вот так this.applesPrice? Или только через класс, как в данном примере внутри метода вот так Apple.applesPrice ????
0
Артем Дышлюк
1 мая 2019, 10:33
К статическим методам и полям можно обращаться через ссылки на объект. А так как this это ссылка самого на себя, то можно обращаться и так: this.applesPrice. Статическое поле общее для всех экземпляров класса (объектов). Изменяя его в одном из объектов, значение поменяется и для других (в общем случае)
0
hidden #2062118
1 мая 2019, 10:42
Артем, спасибо. Буду знать.
0