
- •Программирование на Java
- •Глава 1 Введение в java. Основы языка.
- •Тема 1.1 Язык программирования java.
- •Тема 1.2 Состав пакета Java2.
- •Тема 1.3 Настройка среды окружения.
- •Тема 1.4 Структура Java-программы.
- •Тема 1.5 Набор текста, запуск и компиляция простейшей программы.
- •Тема 1.6 Подробное рассмотрение кода простейшей программы.
- •Тема 1.7. Создание программы в разных средах разработки.
- •Тема 1.8 Лексические основы языка
- •Тема 1.9 Элементарные типы данных.
- •Тема 1.10 Преобразование типов.
- •Арифметические операции
- •Операции сравнения
- •Тема 1.11 Кoнсольный ввод с помощью класса java.Util.Scanner
- •Тема 1.12 Классы-оболочки
- •Тема 1.13 Автоупакока и автораспаковка.
- •Тема 1.14 Операторы
- •1.14.1 Блок
- •1.14.2 Условный оператор if
- •1.14.4 Оператор цикла while
- •1.14.5 Оператор цикла do-while
- •1.14.6 Оператор цикла for
- •1.14.7 Оператор continue и метки
- •1.14.8 Оператор break
- •1.14.9 Оператор варианта switch
- •Тема 1.15 Статический импорт
- •Тема 1.16 Класс Math
- •Задания
- •Тема 1.17 Псевдослучайные числа
- •Тема 1.18 Генерация случайных чисел
- •Тема 1.19 Массивы в Java
- •1.19.1 Объявление и заполнение массива
- •1.19.2 Сортировка массива
- •Сортировка выбором
- •Сортировка методом пузырька
- •1.19.3 Многомерные массивы
- •Задания
- •1.19.4 Нерегулярные массивы
- •Глава 2 классы
- •Тема 2.1 Основы классов
- •Тема 2.2 Общая форма класса
- •Тема 2.3 Объявление объектов
- •Тема 2.4 Более подробное рассмотрение операции new
- •Тема 2.5 Присваивание переменных объектных ссылок
- •Тема 2.6 Знакомство с методами
- •Тема 2.7 Возвращение значения из метода
- •Тема 2.8 Добавление метода, принимающего параметры
- •Тема 2.9 Конструкторы
- •Тема 2.10 Сборка мусора
- •Тема 2.11 Перегрузка методов
- •Тема 2.12 Перегрузка конструкторов
- •Тема 2.13 Использование объектов в качестве параметров
- •Тема 2.14 Более пристальный взгляд на передачу аргументов
- •Тема 2.16 Рекурсия
- •Тема 2.17 Введение в управление доступом
- •Тема 2.18 Ключевое слово static
- •Тема 2.19 Ключевое слово final
- •Тема 2.20 Аргументы переменной длины
- •Тема 2.21 Строки и числа
- •Тема 2.22 Нумерованные типы
- •Глава 3 наследование и интерфейсы
- •Тема 3.1 Основы наследования
- •Тема 3.2 Наследование и доступ к членам класса
- •Тема 3.3 Конструкторы и наследование
- •Тема 3.4 Использование ключевого слова super для вызова конструктора суперкласса
- •Тема 3.5 Использование ключевого слова super для доступа к членам суперкласса
- •Тема 3.6 Многоуровневая иерархия
- •Тема 3.7 Когда вызываются конструкторы
- •Тема 3.8 Объекты подклассов и ссылки на суперклассы
- •Тема 3.9 Переопределение методов
- •Тема 3.10 Переопределение методов и поддержка полиморфизма
- •Тема 3.11 Использование абстрактных классов
- •Тема 3.12 Использование ключевого слова final
- •Тема 3.13 Предотвращение переопределения методов
- •Тема 3.14 Предотвращение наследования
- •Тема 3.15 Класс Object
- •Тема 3.16 Интерфейсы
- •3.16.1 Объявление интерфейса.
- •3.16.2 Реализация интерфейсов
- •3.16.3 Использование ссылок на интерфейсы
- •3.16.4 Переменные в составе интерфейсов
- •3.16.5 Наследование интерфейсов
- •Тема 3.17 Пакеты и ограничение доступа
- •Тема 3.18 Внутренние классы
- •3.18.1 Внутренние (inner) классы
- •3.18.2 Вложенные (nested) классы
- •3.18.3 Анонимные (anonymous) классы
- •Глава 4 Обработка исключительных ситуаций
- •Тема 4.1 Исключения в Java
- •Тема 4.2 Типы исключений
- •Тема 4.3 Неперехваченные исключения
- •Тема 4.4 Ключевые слова try и catch
- •Тема 4.6 Ключевое слово throw
- •Тема 4.7 Ключевое слово throws
- •Тема 4.8 Ключевое слово finally
- •Ошибка при выполнении метода1 java.Lang.ArithmeticException: Demo
- •Тема 4.9 Потомки Exception или написание своих классов ошибок
- •Глава 5 Универсальные типы. КоллекциИ
- •Тема 5.1 Общие сведения об универсальных типах
- •Тема 5.2 Универсальный класс с двумя параметрами типа
- •Тема 5.3 Ограниченные типы
- •Тема 5.4 Использование групповых параметров
- •Тема 5.5 Универсальные методы
- •Тема 5.6 Универсальные интерфейсы
- •Тема 5.7 Ошибки неоднозначности
- •Тема 5.8 Ограничения универсальных типов
- •Тема 5.9 Краткий обзор коллекций
- •5.9.1 Класс ArrayList
- •5.9.2 Класс LinkedList
- •5.9.3 Класс HashSet
- •5.9.4 Класс TreeSet
- •5.9.5 Доступ к коллекции через итератор
- •5.9.6 Алгоритмы коллекций
- •Глава 6 jdbc (Java DataBase Connectivity) Тема 6.1 Драйверы, соединения и запросы
- •Тема 6.2 Простое соединение и простой запрос
- •Тема 6.2 Класс ResultSet
- •Тема 6.3 Метаданные
- •Тема 6.4 Подготовленные запросы
- •Глава 7 Swing и пользовательский интерфейс
- •Тема 7.1 Общие сведения о swing
- •Тема 7.2 Архитектура mvc
- •Тема 7.3 Контейнер и компоненты
- •Тема 7.4 Простая программа, использующая средства Swing
- •Тема 7.5 Поддержка событий
- •Тема 7.6 Использование кнопок и обработка событий
- •Тема 7.7 Краткие сведения о диспетчерах компоновки
- •Тема 7.8 Пример использования jdbc и swing вместе
Тема 3.16 Интерфейсы
3.16.1 Объявление интерфейса.
В объектно-ориентированном программировании часто бывает полезно указать, что класс должен делать, но не определять, как это должно быть сделано. Пример такого подхода уже встречался вам при рассмотрении абстрактных методов. Абстрактный метод определяет сигнатуру метода, но не его реализацию. Подкласс должен реализовать абстрактные методы, присутствующие в суперклассе. Таким образом, абстрактный метод описывает интерфейс метода, но не дает его реализацию. Убедившись, что абстрактные классы и методы очень полезны, имеет смысл несколько развить эту тему. В языке Java имеется возможность полностью отделить интерфейс класса от его реализации. Для этой цели служит ключевое слово interface.
Синтаксически интерфейсы напоминают абстрактные классы. Однако в составе интерфейса не может быть определено тело ни одного из методов. Таким образом, интерфейс не содержит реализации ни одного метода. Он описывает, что должно быть сделано, но не поясняет, как. Если интерфейс определен, его можно реализовать в сколь угодно большом количестве классов. Справедливо и обратное: один класс может реализовать любое количество интерфейсов.
Для того чтобы реализовать интерфейс, класс должен определить методы, описанные в интерфейсе. Каждый класс может содержать собственную реализацию методов. Другими словами, два класса могут реализовать один и тот же интерфейс различными способами, но каждый из них должен поддерживать один и тот же набор Методов. Метод, имеющий сведения об интерфейсе, может использовать экземпляры класса, поскольку интерфейс позволяет выполнять с объектом все необходимые операции. Посредством ключевого слова interface Java позволяет полностью использовать принцип полиморфизма "один интерфейс – несколько методов".
Интерфейс представляется в следующем формате.
тип_доступа interface имя {
тип_возвращаемого_значения имя-метода_1 (список параметров);
тип_возвращаемого_значения имя-метода_2 (список параметров);
переменная_1 = значение;
переменная_2 = значение;
// …
тип_возвращаемого_значения имя-метода_N (список параметров);
переменная_N = значение;
}
В данном случае модификатор типа доступа может быть либо public, либо не использоваться вовсе. Если спецификатор отсутствует, применяется правило предусмотренное по умолчанию, т.е. интерфейс оказывается доступным только членам своего пакета. Ключевое слово public указывает на то, что интерфейс может использоваться из любого другого пакета. (Код интерфейса, объявленного как public, должен храниться в файле, имя которого совпадает с именем интерфейса.) Имя интерфейса должно представлять собой допустимый идентификатор.
При объявлении методов указываются их сигнатуры и типы возвращаемого значения. Эти методы являются абстрактными. Как уже было сказано ранее, реализация метода не может содержаться в составе интерфейса.
Каждый класс, в определении которого указан интерфейс, должен реализовывать все методы, объявленные в составе интерфейса. Методы, объявленные в составе интерфейса, считаются общедоступными.
Переменные, объявленные в составе интерфейса, не являются переменными экземпляра. Считается, что перед ними указаны ключевые слова public, final и static; и они обязательно подлежат инициализации. Другими словами, в составе интерфейса недопустимы переменные, а могут присутствовать только константы.
Ниже приведен пример определения интерфейса Radio. Предполагается, что данный интерфейс будет реализован классом HomeRadio.
Листинг 3.22
public interface Radio {
public void on();
public void off();
public void nextChannel();
public void previousChannel();
public void showChannel();
}
Данный интерфейс объявлен как public, следовательно, он может быть реализован классом, принадлежащим любому пакету.