Базовым элементом объектно-ориентированного программирования в языке Java является класс. В этой статье Вы научитесь создавать и расширять свои собственные классы, работать с экземплярами этих классов и начнете использовать мощь объектно-ориентированного подхода.
Напомним, что классы в Java не обязательно должны содержать точку входа (метод main). Единственное назначение этого метода — указать интерпретатору Java, откуда надо начинать выполнение программы. Для того, чтобы создать класс, достаточно иметь исходный файл, в котором будет присутствовать ключевое слово class, и вслед за ним — допустимый идентификатор и пара фигурных скобок для его тела.
class Point {
}
ЗАМЕЧАНИЕ
Имя исходного файла Java должно соответствовать имени хранящегося в нем класса. Регистр букв важен и в имени класса, и в имени файла.
Класс — это шаблон для создания объекта. Класс определяет структуру объекта и его методы, образующие функциональный интерфейс. В процессе выполнения Java-программы система использует определения классов для создания представителей классов. Представители являются реальными объектами. Термины «представитель», «экземпляр» и «объект» взаимозаменяемы. Ниже приведена общая форма определения класса.
class имяКласса [extends имяСуперкласса] {
тип переменная1_объекта;
тип переменная2_объекта;
тип переменнаяN_объекта;
тип имяМетода1(список_параметров) {
тело метода;
}
тип имяМетода2(список_параметров) {
тело метода;
}
тип имяМетодаN(список_параметров) {
тело метода;
}
}
Ключевое слово extends указывает на то, что «имяКласса» — это подкласс класса «имяСуперкласса». Во главе классовой иерархии Java стоит единственный ее встроенный класс — Object. Если вы хотите создать подкласс непосредственно этого класса, ключевое слово extends и следующее за ним имя суперкласса можно опустить — транслятор включит их в ваше определение автоматически. Примером может служить класс Point, приведенный ранее.
Свойства класса (instance variables)
Данные инкапсулируются в класс путем объявления переменных между открывающей и закрывающей фигурными скобками, выделяющими в определении класса его тело. Эти переменные объявляются точно так же, как объявлялись локальные переменные в предыдущих примерах. Единственное отличие состоит в том, что их надо объявлять вне методов, в том числе вне метода main. Ниже приведен фрагмент кода, в котором объявлен класс Point с двумя переменными типа int.
class Point {
int х, у;
}
В качестве типа для переменных объектов можно использовать как любой из простых типов, описанных в прошлых статьях, так и классовые типы. Скоро мы добавим к приведенному выше классу метод main, чтобы его можно было запустить консольно и создать несколько объектов.
Оператор new
Оператор new вызывает конструктор указанного класса для создания объекта этого класса и возвращает ссылку на вновь созданный объект. Ниже приведен пример создания и присваивание переменной р экземпляра класса Point.
Point р = new Point();
Вы можете создать несколько ссылок на один и тот же объект. Приведенная ниже программа создает два различных объекта класса Point и в каждый из них заносит свои собственные значения. Оператор точка используется для доступа к переменным и методам объекта.
Попробуем откомпилить... Вывалилась ошибка компиляции:
говорящая о том, что класс Point, использующийся в этом классе, отсутствует.
Поправим это дело и создадим требуемый класс (такой же, как выше). Создадим его полностью пустым. Точку входа не будем прописывать, т.к. она у нас уже есть в "главном" классе. И обязательно перекомпилим исходник.
И снова попытаемся перекомпилить и запустить на исполнение главный класс:
Теперь ошибок компиляции не произошло и даже программа выполнилась. И как бы правильно. Но на самом деле - совсем не правильно, т.к. класс Point при создании его объектов был проигнорирован по очень простой причине - в нём отсутствует конструктор, т.е. метод, позволяющий создавать экземпляры класса. И на самом деле создался объект по конструктору его суперкласса, т.е. класса Object - внутреннего класса Java. А уже потом использовались расширения класса Point до свойств x и y.
Пока оставим в покое класс TwoPoints и отредактируем класс Point, прописав в нём точку входа и создание объекта самого себя:
Таким образом, перекомпилив и запустив его, мы узнали, что объекты класса можно создавать и внутри самого класса.
Итак, теперь подведём промежуточные итоги:
1. Созданный ранее класс можно использовать для создания его объектов в других классах. Главное, чтоб откомпиленный класс находился в том же каталоге, что "основной";
2. Объекты класса можно создавать внутри самого себя;
Переменные класса называются его свойствами. Так у класса Point два свойства - x и y. Как вы уже увидели, доступ к этим свойствам объекта класса извне осуществляется через оператор "точка" (.):
Point tochka = new Point(); // Мы создали объект класса Point с именем tochka
tochka.x = 215; // Свойству x объекта tochka мы установили значение 215
tochka.y = 318; // Свойству y объекта tochka мы установили значение 318
// Таким образом, мы создали точку с координатами на плоскости: tochka(215, 318)
Если мы ещё добавим в класс свойства
int z; // координата z
String color; // цвет
то тем самым расширим точку до цветной трёхмерной.
И можно теперь создавать сколько угодно таких точек с различными координатами в 3D и различных цветов.
Думаю, смысл классов и его свойств на этом шаге понятен.
А теперь задание...
1. Создайте класс (к примеру, класс Car), описывающий параметры автомобилей (например: марку, модель, год выпуска, цвет, пробег, номер...)
2. Создайте главный класс, в котором создайте массив из 8 машин
3. В цикле выведите все эти автомобили на консоль - по одной на строчку, их параметры разделите слэшем (косой чертой, дробью, "/").
И ещё одно задание:
Используя предыдущий код, выведите эти автомобили по порядку - от самой старой, до самой новой.
|