Вложенные классы
Предположим, одним из членов класса является… класс. Этот последний класс называется вложенным классом (возможны также вложенные интерфейсы). Можно вкладывать классы в интерфейс. Такие классы называются статическими. Вложенные классы, которые не являются статическими, носят название внутренних классов. Они могут реализовать вложенные интерфейсы, могут наследоваться и пр. В листинге 4.15 приведен пример работы с внутренними и вложенным статическими классами.
Листинг 4.15.
Пример работы с внутренними и вложенными статическими классами
class Go { class GoAway { String goAway; public void setGoAway(String s) { this.goAway = "Уходи прочь, " + s; } } static class GoHome { String goHome; public void setGoHome(String s) { this.goHome = "Уходи домой, " + s; } } } class Main { public static void main(String[] args) { Go myGo = new Go(); Go.GoHome gHome = new Go.GoHome(); gHome.setGoHome("Вася"); System.out.println(gHome.goHome); Go.GoAway gAway = myGo.new GoAway(); gAway.setGoAway("Петя"); System.out.println(gAway.goAway); } }
Внутренние классы очень удобно использовать, так как они могут обращаться ко всем закрытым членам класса.
Возможно также использование локальных классов, которые, как и переменные, относятся только к блокам. Они не является элементами класса, они являются элементами блока.
Резюме
1. Класс — это шаблон для создания объектов. Он содержит переменные для хранения свойств, называемые полями, а также именованные блоки кода — методы.
2. Методы можно перегружать и переопределять.
3. Объекты создаются с помощью ключевого слова new.
4. Интерфейсы — это структуры данных, которые могут содержать объявление методов, а также константы.
5. Бывают вложенные классы и интерфейсы.
Вопросы
1. Что такое класс?
2. Что такое объект?
3. Что такое оператор new?
4. Что такое модификатор static?
5. Что такое модификатор strict fр?
6. Что такое модификатор protected?
7. Что такое модификатор void?
8. Что такое модификатор private?
9. Что такое модификатор abstract?
10. Что такое модификатор final?
11. Что такое метод?
12. Что такое заголовок метода?
13. Что такое тело метода?
14. Что такое аргументы (или параметры)?
15. Что такое поля?
16. Что такое тип возвращаемого значения?
17. Что такое интерфейс?
18. Что такое абстрактный метод?
19. Что такое статический метод?
20. Что такое ссылка this?
21. Что такое ссылка super?
22. Что такое переопределение методов?
23. Что такое перегрузка методов?
24. Что такое локальные переменные?
Контрольные упражнения
1. Напишите программу, которая содержала бы класс, имеющий все основные арифметические методы.
2. Напишите программу, где содержалось бы два-три независимых друг от друга класса, которые использовали бы один и тот же интерфейс.
3. Что неправильно в программе, приведенной в листинге 4.16?
Листинг 4.16.
Пример программы
class Fruits { String name; private void setName(String name) { this.name = name; } private String getName() { return name; } } class Main { public static void main(String[] args) { Fruits apple = new Fruits(); apple.setName ("Apple"); System.out.println(apple.getName()); } }
Ошибка в листинге 4.15 в строке 20: вместо “gHome ” должно быть “goHome”.
А нет, туплю.
Код в виде Go.GoHome gHome = new Go.GoHome(); вызывает ошибку. А если написать как в строке 23: Go.GoHome gHome = myGo.new GoHome(); тогда всё норм.