Всем доброго!
Задачу решил сам, с первого раза.
Но попутно появился любопытный вопрос, который долго зрел и сейчас оформился.
Вернее их целых 2 - буду благодарен, если кто прояснит...
ВОПРОС 1:
В методе main мы видим создание объектов. Но уже 2 задача, где их называют "переменными". Это меня путает...Так все же переменные или объекты? Или же это переменные, которые содержат объекты? И как отличить переменные от объектов?
Итак вот сам этот момент-что это? :
Food food = new Food();
Selectable selectable = new Food();
Я это понимаю -как создание 2 объектов: food и selectable....А говорится что это-переменные...Запутался короче.
ВОПРОС 2:
В методе main идет вызов метода с помещенным туда объектом, следующего вида:
foodMethods(food);
В моем решении, мне IDE подсказала, что можно методы для объекта вызвать следующим образом:
food.eat();
food.onSelect();
В обоих случаях(если я правильно понимаю) -мы вызываем метод для объекта. Как именно (помещая объект в метод или вызывая метод для объекта-это уже не суть. Это частности).
САМ ВОПРОС: в чем разница между этими двумя способами и зачем нужно иметь 2 этих способа?
Айдар Загретдинов
20 уровень
3 Вопроса по задаче. Непосредственно решения не касаются-уже решил. Но задача подняла для меня их...
Архивный
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Demashe
17 февраля 2018, 22:35
Спасибо всем! А то в курсе 2.2 налита одна вода=коробки,фантики и как решать задачи ничего не сказано =как писать,как понимает машина,как должны понимать мы? Кинули задачки простые и решайте Гул вам в помощь или расскажем через десяток уроков если поймете уже конечно(((
Сергеев Виктор и Стас Пасинков! На данном этапе всё понятно мне просто,доходчиво!
Что это всё обозначения переменой(в ней может лежать и ОБЪЕКТ с сотнями параметров!)-это так прописывается переменные в глобальную( наверно если это правильно назвать)функцию,вернее сказать ссыль хранится в этой функции(например=main),а сам объект (весь) или переменная хранится где то в коде и обозначается как КЛАСС (pyblic static class НАЗВАНИЕ КЛАССА) с перечислением уже переменных.
+3
Сергеев ВикторMaster
16 января 2018, 03:10
ну и я чтоли добавлю в коротком стиле =)
1.
переменная это то где лежит, объект то, что лежит. Так проще понять, но объекты лежат в куче, а в переменных ссылки, но это потом поймешь.
Просто запомни переменная слева, объект справа.
2.
Дополню остальных
При вызове метода на объекте, в метод передается параметр this указывающий на вызывающий объект. Сложно, так что просто привыкни, поймешь со временем.
Человек умеет ходить, рыба плавать, кот тырить игрушки с елки. В твоем случае еда умеет выбираться и есться.
+22
Стас Пасинков Software Developer в Zipy Master
15 января 2018, 22:55
по второму вопросу - представь, что у тебя есть объект "кошелек". и ты хочешь вызвать на нем какой-то метод, именно на этом кошельке. например метод для получения денег. тогда ты используешь:
теперь представь, что ты хотел бы передать свой объект кошелька какому-то другому человеку, и чтоб тот человек уже мог вызвать на этом объекте тот же метод для получения из твоего кошелька твоих денег (да, маловероятная ситуация, но все же :) ). тогда делаешь так:
и где-то там в дебрях того метода giveHerWallet() - она вызывает нужный ей метод на твоем кошельке:
+9
Эльвира Эльвира
15 января 2018, 22:53
Я так понимаю:
1) Все класы в Java наследуются от гл класса Object. Все классы - это объекты. В данной записи "Food food = new Food();", если говорить красивым языком food - это экземпляр класса. Также она может называться и переменной, на мой взгляд тут нет ничего страшного.
Переменная может быть как и примитивного типа данных (byte, int, boolean ...) int x = 5;
Также переменная может являться экземпляром класса Food food = new Food();
2) По-моему разница в написании зависит от того, какой метод, static/не static
Можно с помощью идеи поэксперементировать, и посмотреть на неск вызовах стандартных, уже существующих методах.
+1
Anatolii Terela
15 января 2018, 22:50
ВОПРОС 1:
food - это переменная типа Food;
selectable - переменная типа Selectable;
Создаются два объекта Food(), на которые ссылаются эти переменные, создаются в тот момент, когда Вы пишете слово new.
Здесь:
переменной типа Food, которая называется newFood присваивается ссылка переменной selectable с приведением к типу Food. Потому и переменные.
ВОПРОС 2:
- это вызов метода eat() у объекта, на который ссылается переменная food.
- это вызов у того же объекта метода интерфейса , который он ОБЯЗАН реализовать, если его класс , то есть реализует интерфейс Selectable.
+5
Стас Пасинков Software Developer в Zipy Master
15 января 2018, 22:46
+18
Daos
15 января 2018, 22:32полезный
По идее на 14 уровне уже должен был разобраться...
1) Food food = new Food(); Selectable selectable = new Food();
У тебя есть класс Food - это инструкция для создания объекта, new Food() создает объект класса Food.
Если ты создашь 10 объектов - как ты скажешь программе с которым ты сейчас хочешь работать?
Для этого ты и помещаешь их в переменные food и selectable. При этом переменные имеют тип Food и Selectable, а могли быть типа Object или String например. Тип определяет какие методы ты можешь вызвать у этого объекта.
2) foodMethods(food)
В данном случае food это параметр, который ты передаешь в метод. Cам метод отработает, но не факт что в методе твой объект будет использован (смотря что написано в методе). Например метод добавит твой объект в ArrayList - но сам объект никак не изменится от этого.
food.eat();
food.onSelect();
Вызывают методы для конкретного объекта хранящегося в переменной food.
+8