interface Звучание
{
void голос();
}
class Кот implements Звучание
{
void голос()
{
println("МЯУ");
}
}
class Собака implements Звучание
{
void голос()
{
println("ГАВ");
}
}
class Рыбка
{
...
}public static void main(String[] args)
{
// добавляем всех животных в список
ArrayList pets = new ArrayList();
pets.add(new Кот());
pets.add(new Собака());
pets.add(new Рыбка());
// орать, если есть такая способность
for(Object pet: pets)
{
if (pet instanceof Звучание)
{
Звучание крикун = (Звучание) pet;
крикун.голос();
}
}
}Laziz Karimov
1 уровень
Объясните кусочек кода? if (pet instanceof Звучание) { Звучание крикун = (Звучание) pet; крикун.голос(); }
Решен
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
13 февраля 2022, 12:03решение
Перевод кода на русский язык выглядит крипово, прям повеяло 1С'ом.
По сути твоего вопроса:
Для начала отформатируем нормально этот код
Дальше по пунктам. Под условием if проверяется, является ли объект pet Объектом класса Звучание. В данном случае правда, Звучание это интерфейс, не класс, но смысл тот же.
Если проверка выполняется, создается новая переменная типа Звучание, которой присваивается ссылка на объект pet, но с приведением типа, это возможно, потому как мы только что проверили что pet действительно относится к типу Звучание, если бы это было не так мы бы получили исключение на этой строке (ClassCastException)
Ну и дальше у новой переменной вызывается метод интерфейса Звучание.
Как видишь, рыбка этот интерфейс не имплементирует, потому у нее он вызван не будет, рыбка не instanceof Звучание. А вот Кот и Собака да.
+2