- •Java - объектно-ориентированный язык
- •Виртуальная Java-машина.
- •Алфавит языка Java
- •Типы данных
- •Числа высокой точности
- •Переменные в Java
- •Объявление переменной
- •Область действия и время жизни переменной
- •Операции в Java
- •Арифметические операции
- •Логические операции
- •Побитовые операции
- •Операции сдвига
- •Тернарный оператор ?:
- •Оператор запятая
- •Одномерные массивы
- •Многомерные массивы
- •Функции
- •Класс Поля и методы
- •Модификаторы доступа
- •Инициализация и очистка
- •Перегрузка методов
- •Ключевое слово this
- •Вызов конструктора из конструктора
- •Использование объектов в качестве параметров
- •Ключевое слово static
- •Спецификатор final
- •Вложенные и внутренние классы
- •Сборщик «мусора»
- •Как работает сборщик мусора
- •Наследование
- •Основы наследования
- •Использование ключевого слова super
- •Использование super для вызова конструктора суперкласса
- •Использование super для доступа к скрытым членам суперкласса
- •Конструкторы при наследовании
- •Динамическая диспетчеризация методов
- •Абстрактные классы
- •Использование final с наследованием
- •Использование final для отказа от переопределения
- •Использование final для отмены наследования
- •Класс Object
- •Пакеты и интерфейсы Пакеты
- •Оператор package
- •Оператор import
- •Уровни доступа.
- •Интерфейсы
- •Оператор implements
- •Частичные реализации
- •“Множественное” наследование в Java
- •Конфликты имен при комбинировании интерфейсов
- •Расширение интерфейса
- •Группировка констант
- •Инициализирование полей в интерфейсах
- •Вложенные интерфейсы
- •Стандартный ввод/вывод
- •Чтение из стандартного ввода
- •Замена System.Out на PrintWriter
- •Первое приложение Java
- •Исключительные ситуации. Обработка исключений
- •Типы исключений
Использование final для отказа от переопределения
В некоторых случаях бывает необходимо отменить одно из свойств языка Java – переопределение методов при наследовании. Методы объявленные как final не могут быть переопределены. Это демонстрируется на следующем примере.
class A
{ final void fun()
{ … }
. . .
}
class B extends A
{ void fun() // error: метод нельзя переопределять
{ … }
. . .
}
Одним из достоинств final-методов является то, что компилятор может их «встраивать» в точку их вызова. Тем самым, сокращая время на их вызов. Встраиваться могут только final-методы. Т.к. эти методы не переопределяемы, то их вызов может быть организован на этапе компиляции – раннее связывание.
Использование final для отмены наследования
Для отмены наследования одного класса другим применяется еще одна форма использования слова final.
final class A
{ . . .
}
class B extends A // error: класс В не может наследоваться от final-класса
{ . . .
}
При этом все методы final-класса А неявно объявляются final-методами. Так же отметим, что абстрактный класс не может быть и final-классом, т.к. он обязательно должен быть определен в подклассе.
Класс Object
В Java имется один класс – Object, являющийся суперклассом для всех других классов. Таким образом ссылочная переменная типа Object может обращаться к объекту любого другого класса. Более того, так как массивы реализуются как и классы через ссылочную переменную, то переменная типа Object может также обращаться и к массиву.
Пакеты и интерфейсы Пакеты
Для того, чтобы имя разработанного класса не вступало в конфликт с такими же именами других классов в Java используются контейнеры для таких классов. Т.о. пакет – это контейнер для классов. Пакет используется для определения пространства имен классов разделенное на именованные области. Например, можно создать класс Shape, заключить его в пакет и не думать после этого о возможных конфликтах, которые могли бы возникнуть, если бы кто-нибудь создал класс с именем Shape. Пакеты - это механизм, который служит как для работы с пространством имен, так и для ограничения видимости. Пакеты подчинены иерархии и явным образом импортируются в определения новых классов. У каждого файла .java есть четыре одинаковых внутренних части. Ниже приведена общая форма исходного файла Java.
одиночный оператор package (необязательный)
любое количество операторов import (необязательны)
одиночное объявление открытого(public) класса
любое количество закрытых(private) классов пакета (необязательны)
Оператор package
Этот оператор первым может появиться в исходном файле Java. Он сообщает транслятору, в каком пакете должны определяться содержащиеся в данном файле классы. Пакеты задают набор раздельных пространств имен, в которых хранятся имена классов. Сообщает транслятору, в каком пакете должны определяться содержащиеся в данном файле классы. Транслятор Java использует для хранения пакетов каталоги файловой системы. Например, объявленный оператором
package java.awt.image;
пакет должен храниться в каталоге
java\awt\image.
Если оператор package не указан, классы попадают в безымянное пространство имен, используемое по умолчанию.
Каталог, который транслятор Java будет рассматривать, как корневой для иерархии пакетов, можно задавать с помощью переменной окружения СLASSPATH. С помощью этой переменной можно задать несколько корневых каталогов для иерархии пакетов (через ; как в обычном PATH).
Пакеты являются хорошим механизмом для отделения классов друг от друга, поэтому все встроенные в Java классы хранятся в пакетах.