Определение класса в Java

Определение класса в Java

Для того чтобы проиллюстрировать особенности создания классов на языке Java, создадим класс, инкапсулирующий сведения о транспортных средствах, например, о легковых автомобилях, фургонах и грузовиках. Назовем этот класс Vehicle. В нем будут хранить­ся следующие сведения: количество пассажиров, емкость топливного бака и среднее по­требление топлива (в милях на галлон).

Ниже приведен первый вариант класса Vehicle. В нем определены три переменные экземпляра: passengers, fuelcap и mpg. Обратите внимание на то, что в классе Vehicle пока еще отсутствуют методы. Они будут добавлены в последующих разделах, а до тех пор в этом классе содержатся только данные.

Объявление класса создает новый тип данных. В данном случае этот тип называет­ся Vehicle. Мы будем использовать это имя для объявления объектов типа Vehicle. Вспомните, что объявление класса — это всего лишь описание типа данных, и реальный объект при этом не создается. Следовательно, приведенный выше код не приводит к появлению объектов типа Vehicle.

Для фактического создания реального объекта Vehicle потребуется примерно сле­дующий код:

В результате создается объект minivan, представляющий собой экземпляр класса Vehicle. Иными словами, абстрактная оболочка класса обретает физическую форму.

Всякий раз, когда вы создаете экземпляр класса, вы создаете объект, содержащий собственные копии всех переменных экземпляра, определенных в классе. Иными слова­ми, каждый объект типа Vehicle будет содержать свои копии переменных passengers, fuelcap и mpg. Для обращения к этим переменным используется так называемая точеч­ная нотация, в соответствии с которой имя переменной указывается после имени объек­та и отделяется от него точкой:

В этой форме объект указывается слева, а член — справа от точки. Так, если пере­менной fuelcap объекта minivan требуется присвоить значение 16, это можно сделать следующим образом:

Вообще говоря, точечной нотацией можно пользоваться для обращения как к пере­менным экземпляра, так и к методам.

Ниже приведен пример программы, в которой используется класс Vehicle.

Файлу, содержащему приведенный выше код, следует присвоить имя VehicleDemo.java, поскольку метод main() находится не в классе Vehicle, а в классе VehicleDemo.

В результате компиляции программы будут созданы два файла с расширением . class:

  • один — для класса Vehicle
  • другой — для класса VehicleDemo

Компилятор Java авто­матически помещает каждый класс в отдельный файл с расширением .class.

Совсем не обязательно, чтобы классы Vehicle и VehicleDemo находились в одном и том же исход­ном файле. Их можно расположить в двух файлах: Vehicle.java и VehicleDemo.java.

Для того чтобы привести эту программу в действие, следует запустить на выполнение файл VehicleDemo. class. В итоге на экран будет выведен следующий результат:

Прежде чем двигаться дальше, рассмотрим следующий основополагающий принцип: каждый объект содержит собственные копии переменных экземпляра, определенных в его классе.

Следовательно, содержимое переменных в одном объекте может отличаться от содержимого тех же самых переменных в другом объекте. Между объектами нет ника­кой связи, за исключением того, что они относятся к одному и тому же типу.

Так, если имеются два объекта типа Vehicle, каждый из них содержит собственную копию пере­менных passengers, fuelcap и mpg, причем значения одноименных переменных в этих двух объектах могут отличаться.

Продемонстрируем это на примере приведенной ниже программы (обратите внимание на то, что класс, содержащий метод main(), на этот раз назван TwoVehicles).

Ниже приведен результат выполнения данной программы:

Как видите, данные из объекта mini van отличаются от соответствующих данных из объекта sportscar. Это обстоятельство иллюстрирует приведенный ниже рисунок.

Определение класса в Java