Навигация
Главная
Поиск
Форум
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
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Бутик бухта свежая рыба МясКо.
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

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

Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
Создание последовательности окон и передвижение окон по экрану на Turbo ...
База данных студентов на Delphi (файл записей) + Блок схемы

Перечислимый тип в 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 January 13 2009 10:19:56 · 1 Комментариев · 8427 Прочтений · Для печати

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


Комментарии
Jay January 23 2010 12: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...
Шаблон для новост...

Случайные загрузки
Распознавание тек...
AlignEdit
THttpScan v4.1
Программирование ...
База англоязычных...
LaserTank [Исходн...
Последнее загруж...
WAP версия сайта
ЯЗЫК ПРОГРАММИРОВ...
Панель статистики...
Delphi 2005 Секре...
Анимированное поя...
Java в примерах -...
Нестандартные при...
AboutSystem
Win-Prolog 3.618
Billenium Effects...
Сложный калькулятор
Правила программи...
AlnComponents

Топ загрузок
Приложение Клие... 100800
Delphi 7 Enterp... 98064
Converter AMR<-... 20302
GPSS World Stud... 17068
Borland C++Buil... 14261
Borland Delphi ... 10388
Turbo Pascal fo... 7398
Калькулятор [Ис... 6093
Visual Studio 2... 5241
Microsoft SQL S... 3676
Случайные статьи
Содержание
Формы и методы рез...
Обобщение алгоритм...
File components ma...
Как, где и по чем ...
Где мы находимся?
Определяя переменн...
Методы доказательс...
Модуль Link. Прило...
Кому адресована эт...
Оператор switch дл...
Как полнить игрово...
11.1. Простые про...
Эталонная модель п...
Microsoft Word 2007
Наша цель
Базовые управляющи...
Целочисленный арг...
Подтверждение реги...
Error in Initial c...
Приведение типов
Отправлено байт (B...
Сообщения об ошибках
Конференция по PHP...
Применение модульн...
Статистика



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


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