Объясните, пожалуйста, откуда берется "anotherCat" ? Как JAVA понимает, что это такое? И как мы можем в методе fight(Cat anotherCat) передавать ЭТО в качестве входных параметров? Я вот туплю, но не могу понять ))
Андрей
16 уровень
anotherCat
Архивный
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Maksimt58
16 мая 2019, 18:47
https://www.youtube.com/watch?v=sPPaDe_5fcQ&list=PLAma_mKffTOSUkXp26rgdnC0PicnmnDak&index=19
Рекомендую к просмотру! :)
очень толково все объясняется
+1
Maksimt58
16 мая 2019, 14:38
if(this.age > anotherCat.age || this.weight > anotherCat.weight || this.strength > anotherCat.strength){
return true;
}
else {
return false;
Решил таким способ, но тоже не смог понять откуда берутся данные для сравнения переменной anotherCat.
Если this.agе обращается к полям нашего класса, то где создание объекта Cat anotherCat = new Cat(); ??? чтобы anotherCat тоже брал какие-либо значения переменных для сравнения
+2
hidden #598481
16 мая 2019, 14:49
Перед тем как вызвать метод ты создаешь второго кота:
Cat cat2 = new Cat();
Когда ты вызываешь метод, ты этого второго кота передаешь в качестве параметра:
cat1.fight(cat2);
Переменная Cat anotherCat объявлена в объявлении метода:
public boolean fight(Cat anotherCat) {
В момент вызова метода, переменная anotherCat инициализируется тем же котом, ссылка который хранится в cat2.
Другими словами, какого кота ты передашь в параметрах в метод, тот и станет твоим anotherCat.
0
Maksimt58
16 мая 2019, 15:02
Дело в том что код, который я разместил это и есть все решение и никаких дополнительных котов в классе я не создал.
Поэтому не совсем понимаю алгоритм работы программы
0
hidden #598481
16 мая 2019, 15:07
Прочитай мой комментарий ниже. Ты описал механизм того, как проходят драки, без непосредственно проведения самой драки. Механизм посчитали рабочим (что кстати странно, но не суть)
Если бы ты решил использовать этот механизм, то создал бы двух котов снаружи от этого метода и провел между ними бой.
0
Андрей
16 мая 2019, 09:51
Понял, грубо говоря, anotherCat - это переменная типа Cat ?
Но блин, я так же не могу допереть как мы так вызываем метод типа cat1.fight(cat2)
в скобках входные параметры (cat2) - это понятно. Но мне непривычно, что перед названием самого метода какой-то еще параметр через точку "cat1.". Как это вообще работает?
Я как-будто что-то упустил из курса....
Заранее спасибо !
0
hidden #598481
16 мая 2019, 11:14решение
cat1 - это не параметр. Это объект, у которого ты вызываешь метод fight().
Небольшой ликбез.
Тебе нужно понять, что есть класс, и что есть объект. В этой задаче у тебя описан класс Cat, в нем есть метод fight(). То, что он у тебя там есть, это не значит, что сразу кто-то с кем-то подрался: чтобы метод выполнился, его нужно где-то вызвать, в каком-то другом методе. Только в этом случае произойдет выполнение. Поэтому в любой программе всегда есть метод main - иначе не было бы метода, который начал бы вызывать другие методы.
Что вообще такое класс? (Я уже писал под одной из задач, позволю себе процитировать.) Классы - это набор правил, по которому могут взаимодействовать их объекты.
То есть в этой задаче, написал класс Cat, ты говоришь:
"Коты.... Да, коты. Коты бывают разные! У котов разный возраст и вес, а еще сила. И коты умеют драться! Как они дерутся? Они сравнивают свои вес, возраст и силу, у кого больше, тот и победил."
Примерно такие слова подразумеваются в твоем классе. Ты описал механизм драки, но это не значит что произошла драка. Для этого ты должен вызвать этот метод.
Любой метод вызывается у какого-то объекта. Если метод содержится в классе String, например, метод length(), то чтобы его вызвать, тебе нужно создать какой-то объект класса String:
Тут то же самое. Твой метод fight() описан (хранится) в классе Cat. Значит, чтобы его вызвать, тебе нужно сначала создать объект класса Cat:
У кота, ссылка на которого хранится в переменной alpha, можно вызвать метод fight(). Но кот не может драться сам с собой: ему нужен противник, которого мы в этот метод передали бы параметром. Поэтому нужно создать второго кота bravo, и уже с ним вызвать метод:
alpha.fight(bravo); +5
Андрей
16 мая 2019, 14:19
Спасибо! Стало более ясно ;)
0
Maksimt58
16 мая 2019, 18:43
https://www.youtube.com/watch?v=sPPaDe_5fcQ&list=PLAma_mKffTOSUkXp26rgdnC0PicnmnDak&index=19
думаю здесь есть косвенный ответ на вопрос откуда берется anotherCat
0
Николай Габараев Системный Администратор в АО НПЦ Гипроздрав
15 мая 2019, 16:04
иными словами, как ответили ниже
При вызове метода с передачей туда объекта cat2 cat1.fight(cat2) технически метод fight получит такой вид - public boolean fight(Cat cat2) {.
+2
Стас Пасинков Software Developer в Zipy Master
15 мая 2019, 16:01
когда вы вызовете метод fight() - вы передадите в него какого-то другого кота
внутри метода он и будет храниться в переменной anotherCat
а this есть в любом объекте и в любом нестатическом методе. его сама джава "создает" и дает нам им пользоваться. это всегда ссылка на текущий объект. поэтому внутри метода у вас есть ваш кот, и другой кот. останется их просто свести в бою :)
0