Задача: Реализовать метод addPrice(int applesPrice), чтобы при его вызове суммарная стоимость яблок увеличивалось на переданное значение.
Ответ: 150
Код (верный):
public class Solution {
public static void main(String[] args) {
Apple apple = new Apple();
apple.addPrice(50);
Apple apple2 = new Apple();
apple2.addPrice(100);
System.out.println("Apples price is " + Apple.applesPrice);
}
public static class Apple {
public static int applesPrice = 0;
public static void addPrice(int applesPrice) {
Apple.applesPrice = applesPrice + Apple.applesPrice;
}
}
}
Интересует строчка Apple.applesPrice = applesPrice + Apple.applesPrice;. Я понял, что вначале плюсуется 50+0=50. Но как программа берет значение apple2.addPrice(100)? В строке же не указано, что берется значение apple2.
Уже несколько комментариев прочитал, но все равно до меня не доходит именно этот момент.
Java
Объясните пожалуйста, что происходит в этом коде:
А это потомушта код написан мягко говоря нипанятна... Но сначала давай-ка разберём "public static class Apple"
public static int applesPrice = 0; //вот эта строчка говоряти что у яблок есть цена и она равна 0. но также тут есть волшебное слово "static" - оно говорит что у всех яблок это цена будет ВСЕГДА одинакова что у apple1, что у apple2 или даже у appleAbraCadabra.
метод:
public static void addPrice(int applesPrice) {
Apple.applesPrice = applesPrice + Apple.applesPrice;
}
точно также обновляет цену для яблочков, но поскольку метод статичен (как и поле applesPrice) (статичен значит принадлежит на объекту, например apple1 или apple2, а вообще всему классу), то цена точно также обновляется. А дальше начинается долбанная магия. Вот так вот:
Apple apple = new Apple();
apple.addPrice(50); //в этой строчке мы вызваем статический метод у объекта, так делать не рекомендуется, но джава это позволяет, ну типа если человек дурак то и чёрт с ним. Она тихо офигевает конечно, но разрешает. Хотя вот так правильнее и синтаксически и вообще:
Apple.apple.addPrice(50);
получается что код:
Apple apple = new Apple();
apple.addPrice(50);
Apple apple2 = new Apple();
apple2.addPrice(100);
Абсолютно идентичен:
Apple.apple.addPrice(50);
Apple.apple.addPrice(100);
Но последний не вносит сумятицы. Т. е. ты выполняя первый код, думаешь что устанавливаешь отдельно цену для apple1 и apple2, а по факту ты устанавливаешь цену для всего класса, и соответсвенно у всех объектов этого класса цена будет одинаковая, она же одна на всех.
public static int applesPrice = 0; //вот эта строчка говоряти что у яблок есть цена и она равна 0. но также тут есть волшебное слово "static" - оно говорит что у всех яблок это цена будет ВСЕГДА одинакова что у apple1, что у apple2 или даже у appleAbraCadabra.
метод:
public static void addPrice(int applesPrice) {
Apple.applesPrice = applesPrice + Apple.applesPrice;
}
точно также обновляет цену для яблочков, но поскольку метод статичен (как и поле applesPrice) (статичен значит принадлежит на объекту, например apple1 или apple2, а вообще всему классу), то цена точно также обновляется. А дальше начинается долбанная магия. Вот так вот:
Apple apple = new Apple();
apple.addPrice(50); //в этой строчке мы вызваем статический метод у объекта, так делать не рекомендуется, но джава это позволяет, ну типа если человек дурак то и чёрт с ним. Она тихо офигевает конечно, но разрешает. Хотя вот так правильнее и синтаксически и вообще:
Apple.apple.addPrice(50);
получается что код:
Apple apple = new Apple();
apple.addPrice(50);
Apple apple2 = new Apple();
apple2.addPrice(100);
Абсолютно идентичен:
Apple.apple.addPrice(50);
Apple.apple.addPrice(100);
Но последний не вносит сумятицы. Т. е. ты выполняя первый код, думаешь что устанавливаешь отдельно цену для apple1 и apple2, а по факту ты устанавливаешь цену для всего класса, и соответсвенно у всех объектов этого класса цена будет одинаковая, она же одна на всех.
>В строке же не указано, что берется значение apple2.
Как это "не указано"? Еще как указано:
apple2.addPrice(100);
Ты просто не отличаешь объекты от классов, в этом вся проблема.
Как это "не указано"? Еще как указано:
apple2.addPrice(100);
Ты просто не отличаешь объекты от классов, в этом вся проблема.
public STATIC int applesPrice как раз и означает, что данная переменная принадлежит всему классу, а не какому-то конкретному элементу
Похожие вопросы
- Объясните, пожалуйста, что такое static?
- JAVA, объясните, пожалуйста, простыми словами
- Подскажите пожалуйста, как в данном коде Java сделать так, чтоб при нажатии цифры 3 программа завершала свою работу?
- Объясните суть кода?
- В этом коде сделать так чтобы был ОДИН метод, (а не 3, как в коде) позволяющий вводить с клавиатуры его характеристики
- Как тестируют код разработчики игр?
- Код на java.
- Помогите пожалуйста, изучаю язык Java. Не понимаю как написать код((
- JAVA. Помогите, пожалуйста, дописать код программы:
- Помогите с заданием (JS, пожалуйста пришлите код)
Хотя вот так правильнее и синтаксически и вообще:
Apple.apple.addPrice(50);
Должны быть такими:
Apple.addPrice(50);
а строочки:
Абсолютно идентичен:
Apple.apple.addPrice(50);
Apple.apple.addPrice(100);
такими:
Абсолютно идентичен:
Apple.addPrice(50);
Apple.addPrice(100);