Всем доброго дня. Я вот решал данную задачку через IDEA, и она мне подсказала в двух моментах, и у меня возникли вопросы типа что это? :
1) когда я пишу условие соответствия key с например "user"
if(key.equals("user")) {
person = new Person.User();
}
Почему через Person.User, а не просто new User(); Потому что класс находиться внутри интерфейса? Просто такие данные мы не получали до этого.
2) в методе doWork(Person person) я пишу следующее :
public static void doWork(Person person) {
if(person instanceof Person.User) {
((Person.User) person).live();
}
И второй вопрос: что это такое ((Person.User) person.)live(); ?
Зачем было написано (Person.User)? Это сужение ссылочного типа или что? И такого рода данных мы не получали.
Прошу дайте понятное разяснение этим двум вопросам, спасибо за ранее
Шадияр
24 уровень
Нужна небольшая помощь
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Шадияр
13 октября 2019, 12:18
Ааа, все я понял.
Во втором вопросе получается, что в параметр был передан метод типа Person и если оно проходит проверку на соответствие с классом/интерфейсом, то мы производим сужение (downcasting), так как Person.User находиться ниже по иерархии класса Person.
0
Гросу
15 октября 2019, 22:00
так Person - интерфейс
есть еще какая-то взаимодействующая иерархия у интерфейсов и классов?
0
Vladyslav
13 октября 2019, 11:59полезный
new Person.User() - это просто вызов конструктора из интерфейса, как я понимаю класс User находится внутри интерфейса Person, а инициализировать интерфейс невозможно
+2
Ksenia VolkovaJava Developer в DXCMaster
13 октября 2019, 11:59полезный
1. User и пр. - это внутренние классы Person. Поэтому мы и обращаемся к ним как Person.User
2. Про приведение типов точно было в лекциях
https://javarush.com/quests/lectures/questcore.level04.lecture03
+2