Я что то пропустил или плохо понял интерфейсы?
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!");
}
}
}
Юрий
19 уровень
Почему внутри интерфейса есть классы, которые имплементируют этот же интерфейс?
Обсуждается
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #3303140
21 марта, 09:38
Тема интерфейсов тут в целом ни при чём. Возможно у тебя ещё не было темы вложенных и внутренних классов, или ты пропустил её.
Если кратко, ты можешь писать свои классы:
1) в отдельных файлах вида ИмяКласса.java. Это обычный публичный класс, который ты можешь импортировать и использовать в любом месте своей программы.
2) как статические классы внутри других классов. Эти классы также называют вложенными (nested)
В этом случае публичность, т.е. внешнюю видимость этого класса ты определяешь самостоятельно используя соответствующий модификатор доступа: public, protected, private, package-private. В этом случае имя класса выглядит как OuterClass.NestedClass. Известный тебе пример такого использования - Map.Entry.
3) как нестатические классы внутри других классов. Эти классы также называют внутренними (inner)
Они также могут быть с разным уровнем публичности. Разница в том, что для создания объекта внутреннего класса тебе нужен будет объект внешнего класса.
4) как локальные классы внутри метода или блока кода. В этом случае область использования этих классов будет ограничена этим блоком кода. Сюда же отнесу анонимные классы, которые создают только один объект при описании этого класса.
5) как вспомогательные классы после основного класса: 0
Anonymous #3303140
21 марта, 09:45
Это была теория. Учитывая, что интерфейс - это тоже класс, хоть и с особенностями, и что внутренние поля и классы интерфейсов всегда public и static, даже если этого не написано, твой вариант номер 2:
Поэтому полное имя такого класса будет Person.User. Ну а то, что он при этом ещё и реализует интерфейс Person - так это не зависит от того, где он написан. Считай, что так совпало, мог бы и другие интерфейсы реализовывать при этом.
Да, у тебя вместо этого могли бы быть отдельные файлы вида User.java и другие, содержащие отдельно каждый класс. Такая структура, как в задаче просто даёт больше контекста, говорит о том, что User - объект не сам по себе, а как бы в контексте "оболочки" Person. Как Map.Entry не может существовать вне контекста наличия Map, так и Person.User не может существовать вне наличия Person. 0