Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Бип из системно... 65535
Пример работы с... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
21 ошибка прогр... 65535
Гостевая книга ... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Содержание сайт... 65535
Invision Power ... 65535
Имитационное мо... 65535
Программируемая... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 14
На сайте нет зарегистрированных пользователей

Пользователей: 13,360
новичок: tomtumper
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование процесса обеспечивающего надежность функционирования АСУ Т...
Расчет обратной матрицы на Delphi + Пояснительная записка
База данных студентов на Delphi + Microsoft SQL Server

Перечислимый тип в Java — это класс
Как уже упоминалось, перечислимый тип в языке Java — это класс. Несмотря на то, что Вы не можете инициализировать переменную типа enum с помощью операции new, у перечислимого типа много функциональных возможностей таких же, как у других классов. То, что тип enum определен как класс, наделяет перечислимый тип в языке Java такими возможностями, каких нет у перечислимых типов в других языках программирования. К примеру, Вы можете создать для него конструкторы, добавить поля и методы и даже реализовать интерфейсы.
Важно понять, что каждая константа перечислимого типа — это объект перечислимого типа. Таким образом, если создать конструктор для типа enum, он будет вызываться при создании каждой константы перечислимого типа. Кроме того, у каждой константы перечислимого типа есть собственная копия переменных, определенных перечислимым типом. Рассмотрим версию описания класса Apple, приведенную в листинге 6.3.
Листинг 6.3. Использование конструктора, поля и метода в перечислимом типе
enum Apple {
Jonathan(10), GoldenDel(9), RedDel(12), Winsap(15), Cortland(8);

private int price; // price of each apple

// Constructor
Apple(int p) { price = p; }

int getPrice() { return price; }
}

class EnumDemo3 {
public static void main(String args[])
{
Apple ap;

// Display price of Winsap.
System.out.println("Winsap costs " +
Apple.Winsap.getPrice() +
" cents.\n");

// Display all apples and prices.
System.out.println("All apple prices:");
for(Apple a : Apple.values())
System.out.println(a + " costs " + a.getPrice() +
" cents.");
}
}



Далее приведен вывод результатов программы из листинга 6.3:
Winesap costs 15 cents.
All apple prices:
Jonathan costs 10 cents.
GoldenDel costs 9 cents.
RedDel costs 12 cents.
Winesap costs 15 cents.
Cortland costs 8 cents.



Приведенная в листинге 6.3 версия класса Apple содержит следующие добавления.
Во-первых, введена переменная price для хранения цены каждого сорта яблок. Во-вторых, в описание класса Apple включен конструктор, которому передается цена сорта яблок. И, в-третьих, добавлен метод getPrice(), возвращающий значение переменной price.
Когда в методе main () объявляется переменная ар, вызывается конструктор для класса Apple по одному на каждую заданную константу. Обратите внимание, как конструктору передаются аргументы — они заключаются в круглые скобки и указываются после каждого имени константы, как показано в следующей строке:
Jonathan (10), GoldenDel (9), RedDel(12), Winesap(15), Cortland(8);
Эти значения передаются в конструктор Apple () в параметре р, который затем присваивает это значение переменной price. Повторю: конструктор вызывается отдельно для каждой константы.
Поскольку у каждой константы есть своя копия переменной price, Вы можете получить цену конкретного сорта яблок, вызвав метод getPrice(). В следующей строке приведен пример получения в методе main() цены сорта Winesap:
Apple.Winsap.getPrice()



Цены всех сортов яблок получены благодаря циклической обработке перечислимого типа с помощью цикла for. Поскольку у каждой константы перечислимого типа есть копия переменной price, значение, связанное с одной константой, отделено и отличается от значения, связанного с другой константой. Эта важная концепция может быть воплощена, только когда перечислимые типы реализованы как классы, что и сделано в языке Java.
Несмотря на то, что в листинге 6.3 приведен один конструктор, перечислимый тип может предложить две или несколько перегруженных форм, как любой другой класс. В листинге 6.4 приведена версия класса Apple, предоставляющая конструктор по умолчанию (без аргументов) (default constructor), присваивающий цене значение, равное —1 для обозначения отсутствия сведений о цене.
Листинг 6.4. Использование конструктора типа enum
enum Apple {
Jonathan(10), GoldenDel(9), RedDel, Winsap(15), Cortland(8);
private int price; // price of each apple
// Constructor
Apple(int p) { price = p; }
// Overloaded constructor
Apple() { price = -1; }
int getPrice() { return price; }
}



Обратите внимание на то, что в листинге 6.4 конструктору для константы RedDel не передается аргумент. Это означает, что вызывается конструктор по умолчанию и переменной price константы перечислимого типа RedDel присваивается значение, равное -1.
Существуют два ограничения применения перечислимых типов. Во-первых, перечислимый тип не может наследовать другой класс. Во-вторых, тип enum не может быть суперклассом. Это означает, что он не может расширяться. Во всех остальных ситуациях перечислимый тип действует как любой другой класс. Важно помнить, что каждая константа перечислимого типа — это объект класса, в котором она определена.
Опубликовал Kest Январь 13 2009 13:19:56 · 1 Комментариев · 7602 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Jay Январь 23 2010 15:12:22
Листинг 6.3
Строчка:
System.out.println("Winsap costs " + Apple.Winsap.getPrice() +
" cents.\n");
Обращение к winsap.getPrice() разве не через ap( имею ввиду объявление " Apple ap; ')?
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Паскаль и Дельфи....
AntiRus
Усложнённый кальк...
Animated Menus
Самоучитель PHP 4
Формирование отче...
Мод "проверочный ...
KOL & MCK v1.69
Delphi 2006 - Спр...
Длинный заголовок...
CwstatusBar
API (Применение A...
Интерактивный инт...
Философия C++. Пр...
C# 2005 и платфор...
Основы программир...
Песочные часы
Delphi 2005 для .NET
Text3D
Керниган Б.В., Ри...

Топ загрузок
Приложение Клие... 100770
Delphi 7 Enterp... 97748
Converter AMR<-... 20258
GPSS World Stud... 17013
Borland C++Buil... 14181
Borland Delphi ... 10257
Turbo Pascal fo... 7371
Калькулятор [Ис... 5966
Visual Studio 2... 5205
Microsoft SQL S... 3661
Случайные статьи
Разделение трафика...
получателям
Контроллер
Форматирование выд...
Модификации устрой...
Отслеживание телеф...
Другие тесты
Значение доменного...
Не пугайтесь Web-у...
Процедура SetPalet...
1. Служба DHCP Ser...
Разработка своими ...
Различные ограниче...
В среде с постоянн...
Работа в отдельном...
Установка, настро...
Управление двусвяз...
СТАТИЧЕСКИЙ ИЛИ ВИ...
Казино Вулкан игро...
Официальный сайт к...
Класс TTalk
Маршрутизаторы
Если ГВС-канал свя...
КЛАССЫ С ДИНАМИЧЕС...
Синтаксис - МПролог
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?