По идее всё должно работать, но не отправлял, чтобы получить разъяснения)
1) Почему объект нельзя инициализировать в цикле, а переменную можно (строка 13 класса Solution)?
т.е. String key получает значение в цикле, а Person person; - нет? Почему обязательно сперва нужно создать Person person = null; Почему без null работать не будет?
2) Строка 15 класса Solution.
while ((key = reader.readLine().equals("user")) || (key.equals("loser")) || (key.equals("coder")) || (key.equals("proger"))) не работает
(((key = reader.readLine()).equals("user")) || (key.equals("loser")) || (key.equals("coder")) || (key.equals("proger"))) работает. Почему? Зачем дополнительно обносить (key = reader.readLine()).equals перед equals в скобки? То есть всё остальное в скобки выносить, чтобы сравнивать boolean и boolean как бы понятно. А здесь же результатом должно быть boolean т.е. присваивается key значение String, которое сравнивается с другим String и на выходе boolean. Почему пишет про то, что нельзя сравнивать boolean и String?
3) обращение к внутренним классам Person как к Person.User понятно, но что это за извращение? зачем создавать классы внутри интерфейса, которые его же и реализуют? Это получается внутренний класс интерфейса? Что даёт? У меня эта конструкция трохи в голове не укладывается.
package com.javarush.task.task14.task1411;
public interface Person {
class User implements Person {
void live() {
System.out.println("I usually just live.");
}
}
class Loser implements Person {
void doNothing() {
System.out.println("I usually do nothing.");
}
}
class Coder implements Person {
void writeCode() {
System.out.println("I usually write code.");
}
}
class Proger implements Person {
void enjoy() {
System.out.println("It's a wonderful life!");
}
}
}