Вроде как это просто проверка и она необходимо только при "понижении", так? Если можно, то разжуйте каждую строчку
public static void doWork(Person person) {
if (person instanceof Person.User) {
Person.User user = (Person.User) person;
user.live();
} else if (person instanceof Person.Loser) {
Person.Loser loser = (Person.Loser) person;
loser.doNothing();
} else if (person instanceof Person.Coder) {
Person.Coder coder = (Person.Coder) person;
coder.writeCode();
} else if (person instanceof Person.Proger) {
Person.Proger proger = (Person.Proger) person;
proger.enjoy();
}
Aleksandr
19 уровень
Решил, но не совсем понимаю что делает метод doWork()
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Антон Full Stack Developer
4 ноября 2020, 16:30
Тут просто проверяется кем на более "высоком" уровне является объект Person person. Если он экземпляр класса Person.User, то можем привести его к этому классу и получить методы, которые есть у Person.User и т.д.
0
Aurora
7 ноября 2021, 20:03
Можно ли написать вместо такого
вот так:
То есть без приведения типа?
Или потому что у интерфейса Person нету никаких методов то мы должны сужать тип к Person.User?
0
Антон
12 ноября 2021, 11:42
я так понял
у интерфейса Персон нет методов а у класса Юзверь входящего в интерфейс Персон - есть.
соотв ваш 2й вариант не сработает. А 1й можно записать короче
if (person instanceof Person.User) ((Person.User) person).live();
приводим и сразу вызываем нужный метод
А вот почему внутренний класс реализует сам интерфейс в который он включен(аля рекурсия) моя не понимать
class User implements Person {
+2
Aurora
13 ноября 2021, 16:21
благодарю за ответ!
0