JavaRush /Курсы /Java Core /Задачи на полиморфизм

Задачи на полиморфизм

Java Core
2 уровень , 2 лекция
Открыта

— Привет, Амиго! Вот тебе пара сотен задач на полиморфизм.

— Что? Еще и сотня задач?!

— Шучу. Всего десять. То есть пять я хотел сказать.

3
Задача
Java Core, 2 уровень, 2 лекция
Недоступна
Киты и коровы
В нормальной жизни кита с коровой не перепутать (хотя в террианских водах порой встречаются морские коровы, а на планетах Содружества и не такое встретишь!), а вот в программировании — сколько угодно. Напишем правильный геттер для класса кит, чтобы программа выдавала фразу «я не корова, я — кит».
3
Задача
Java Core, 2 уровень, 2 лекция
Недоступна
Кит, коровий потомок
Переопределение методов в Java — очень сильный инструмент. Так что усваиваем его на практике, начинаем прямо сейчас. У нас есть кит, потомок коровы. Не спрашивайте, почему так получилось. Дело семейное… Переопределим геттер киту так, чтобы на экран не выводилось сообщение, что он — корова.
3
Задача
Java Core, 2 уровень, 2 лекция
Недоступна
Кесарю — кесарево
Не вызывает сомнения то, что коты и собаки — это животные. И их потомки должны быть животными. Но не просто животными, а совершенно конкретными животными, котами и собаками. Согласны? В таком случае, переопределите метод getChild в классах Cat и Dog, чтобы кот порождал кота, а собака – собаку.
3
Задача
Java Core, 2 уровень, 2 лекция
Недоступна
То ли птица, то ли лампа
Что общего у птицы и лампы? То, что и птицы, и лампы могут быть объектами своих классов. А объекты можно передавать в методы в качестве переменных. В этой задаче пишем метод, который определяет, объект какого класса ему передали, и выводит на экран одну из надписей: Кошка, Собака, Птица, Лампа.
3
Задача
Java Core, 2 уровень, 2 лекция
Недоступна
Определимся с животным
Жизненно важно уметь определять, к какому классу относится животное, считает заводчик кошек Павловна. Давайте поможем Павловне и напишем метод, который определяет, объект какого класса ему передали, и возвращает результат: «Корова», «Кит», «Собака», «Неизвестное животное».
Комментарии (264)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
19 мая 2025
Собрал из всех комментариев за последние 5 лет: ctrl+Y - удалить строку. shift+F6 - переименовать класс/метод/переменную в проекте. ctrl+Z - отмотать действие ctrl+shift+Z - вернуть отмотанное ctrl+X - вырезать строку alt+Insert - создаешь конструктор/геттеры/сеттеры/переопределяешь equls() and hashCode() ctrl+D - копирование строки в IntelliJ IDEA ctrl + W - веделение символа / строки / ряда. trl + shift + W - отмотать выделение шаг назад. ctrl + ? - закомментирование строки с переносом курсора на следующую строку (откат делается таким же образом) Ctrl + Alt + L - Подгоняет все пробелы и фигурные скобки под правильный, более читаемый Ctrl + O - Горячая клавиша в IntelliJ IDEA для переопределения
VadChet Уровень 28
24 мая 2025
блин, не знал, что "ctrl+shift+Z - вернуть отмотанное", поэтому переопределил ctrl+Y отказавшись от возможности удалять строки. Теперь у меня два способа вернуть отмотанное.
25 мая 2025
Это был наш 2025, мы возвращали код как могли
Dalendris l Уровень 27
23 марта 2025

return o instanceof Cow ? "Корова" : o instanceof Dog ? "Собака" : o instanceof Whale ? "Кит" : "Неизвестное животное";
Ratmir Mussabayev Уровень 25
12 сентября 2024
Объясните пожалуйста ситуацию с последней задачкой: я вот написал тремя разными способами(работает и так и так, но в чем разница? только лишь в количестве букв?): public static String getObjectType(Object o) { if (o.getClass().equals(Cow.class)) { return "Корова"; } else if (o instanceof Dog) { return "Собака"; } else if (o.getClass().isAssignableFrom(Whale.class)) { return "Кит"; } else { return "Неизвестное животное"; } }
MegaDog666 Уровень 30
18 сентября 2024
В чем разница применения if (obj instanceof Student) и if (getClass () == obj.getClass ())? Давайте разберемся, что делает каждый подход: instanceof проверяет, является ли ссылка на объект с левой стороны экземпляром типа с правой стороны или некоторым его подтипом. getClass() == ... проверяет идентичность типов. То есть, если getClass() проверяет полную идентичность класса, то instanceof вернет true даже если объект будет всего лишь подтипом, что может дать нам большую гибкость при активном использовании полиморфизма. Собственно, оба подхода хороши, если понимать особенности их работы и применять в нужных местах Есть ещё одно важное отличие. Посмотрите на этот код, он не компилируется:

// Doesn't compile. Cannot class at runtime with instanceof
if (b instanceof obj.getClass()) {
 
}
Для instanceof тип класса, на принадлежность которому мы проверяем, должен быть известен на этапе компиляции. Но мы можем сделать это с помощью Class.isAssignableFrom:

    if (obj.getClass().isAssignableFrom(b.getClass())) {
        System.out.println("obj.getClass() isAssignableFrom b.getClass()");
    }
С помощью Class.isAssignableFrom мы можем проверить принадлежность типу или его потомку даже в том случае, когда тип, на принадлежность которому мы проверяем, на этапе компиляции неизвестен.
Илья Уровень 50
4 октября 2024
o instanceof Cow сделай в if
FolFix Уровень 38
18 августа 2024
Пора кушать материю
SashaCurry Уровень 30
14 августа 2024
-сколько задач? -
vlby Уровень 34
14 августа 2024
не считая самых первых уровней java syntax, пожалуй 1-й уровень все задачи которого получилось решить сразу, не читая лекций)( как-то пока не впечатляет java core( надеюсь пока) лекции все ж проработаю еще конечно)
{Java_Shark} Уровень 36
16 июля 2024
++
Fred Уровень 2
9 мая 2024
фармим ачивы
SomeBody098 Уровень 51
7 мая 2024
Rustam Уровень 26 Student
18 ноября 2024
АХАХАХАХАХХА
Kuttubek7 Уровень 25
21 марта 2024
easy peasy lemon squeezy