
- •Основы классов
- •Общая форма класса
- •Простой класс
- •Объявление объектов
- •Операция new
- •Представление методов
- •Добавление метода к классу Box
- •Возврат значений
- •Добавление метода с параметрами
- •Конструкторы
- •Параметризованные конструкторы
- •Ключевое слово this
- •Скрытие переменной экземпляра
- •Сборка "мусора"
- •Метод finalize()
- •Класс Stack
- •Перегрузка конструкторов
- •Использование объектов в качестве параметров
- •Передача аргументов
- •Возврат объектов
- •Рекурсия
- •Управление доступом
- •Статические элементы
- •Спецификатор final
- •Ревизия массивов
- •Вложенные и внутренние классы
- •Класс String
- •Использование аргументов командной строки
- •Наследование
- •Основы наследования
- •11 Тело класса }
- •Доступ к элементам и наследование
- •Практический пример
- •Переменная суперкласса может ссылаться на объект подкласса
- •Использование ключевого слова super
- •Вызов конструктора суперкласса с помощью первой формы super
- •Создание многоуровневой иерархии
- •II построить клон объекта
- •Когда вызываются конструкторы
- •Переопределение методов
- •Динамическая диспетчеризация методов
- •Зачем нужны переопределенные методы?
- •Применение переопределения методов
- •Использование абстрактных классов
- •Void meth() { // ошибка! Нельзя переопределять.
- •Класс Object
Основы классов
В основе языка Java лежит класс. Класс – это логическая конструкция, на которой построен весь язык Java. Классы в примерах предыдущих программ использовались для того, чтобы включать метод main(), который вводился для иллюстрации некоторых основных синтаксических конструкций языка. В общем случае, классы являются более мощными кострукциями, чем те, которые рассматривались до сих пор.
Наиболее важным в понятии класса является определение новых типов данных. После определения новый тип можно использовать для создания объектов этого типа. Поскольку объект – экземпляр класса, два слова объект и экземпляр часто будут использоваться как взаимозаменяемые.
Общая форма класса
Когда вы определяете класс, то объявляете его точную форму и природу. Делаете вы это, формируя данные, которые он содержит, и код, который оперирует с этими данными. Простые классы могут содержать только код или только данные, однако, в общем случае, классы содержат и то и другое. При этом код класса определяет интерфейс к его данным.
Класс объявляется при помощи ключевого слова class. Классы, которые использовались до сих пор, являются очень ограниченными примерами их полной формы. Классы могут быть (и обычно являются) более сложными конструкциями. Ниже показана общая форма определения класса:
class classname {
type instance-variable_1;
type instance-variable_2;
//...
type instance-variable_n;
type mothodname_1 (parameter-list) {
// тело метода_1
}
type metnodname_2 (parameter-list) {
// тело метода_2
}
//...
type methodname_n (parameter-list) {
// тело метода_ n
}
}
Данные или переменные, определенные в классе, называются переменными экземпляра или экземплярными переменными (instance variables). Код содержится внутри методов (methods). Все вместе, методы и переменные, определенные внутри класса, называются членами класса (class members). В большинстве классов на переменные экземпляра воздействуют методы, определенные в этих классах. Таким образом, именно методы определяют, как могут использоваться данные класса.
Переменные, определенные в классе, называются переменными экземпляра потому, что каждый экземпляр класса (т. е. каждый объект класса) содержит свою собственную копию этих переменных. Таким образом, данные одного объекта отделены от данных другого.
Все методы имеют ту же общую форму, что метод main о, который мы использовали до сих пор. Однако большинство методов не будут определяться как static или public. Обратите внимание, что общая форма класса не определяет метод main(). Классы Java вообще могут включать и метод main(), если класс является стартовой точкой программы. Кроме того, апплеты вообще не используют метод main ().
Замечание В отличие от C++ объявление класса и реализация методов хранятся в одном месте и не определяются отдельно. Это иногда приводит к очень большим исходным (.Java) файлам, т. к. любой класс должен быть полностью определен в одном исходном файле. Данное свойство было встроено в Java потому, что, в конечном счете, хранение спецификации, объявления и реализации в одном месте упрощает поддержку кода.