Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 13
На сайте нет зарегистрированных пользователей

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

Метод конечных разностей для интерполяции/экстраполяции на Delphi
Моделирование работы обрабатывающего участка цеха в GPSS
Лабораторная работа по динамическим спискам на Turbo Pascal (перемещение...

Перечислимый тип в 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 Комментариев · 7991 Прочтений · Для печати

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


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

Случайные загрузки
3d Tank [Исходник...
DS_Group
Microsoft SQL Ser...
RSS Feeds
Иллюстрированный ...
Краснов М. - Open...
PHP 5 в подлинник...
Averaging [Исходн...
Отключение и вклю...
Szwavepanel
Binary2XMLDemo (Р...
Pirc
Visual Basic for ...
HTMLredaktor
VFW
C# 2005 и платфор...
Zoom [Исходник на...
Длинный заголовок...
База для Allsubmi...
Книга по Delphi (...

Топ загрузок
Приложение Клие... 100779
Delphi 7 Enterp... 97934
Converter AMR<-... 20285
GPSS World Stud... 17037
Borland C++Buil... 14206
Borland Delphi ... 10334
Turbo Pascal fo... 7381
Калькулятор [Ис... 6050
Visual Studio 2... 5214
Microsoft SQL S... 3667
Случайные статьи
Где купить сила им...
Конфигурирование в...
Опасность разглаше...
Процедура просмотр...
Хорошие казино буд...
Полиморфизм
Как создать RAID н...
Описание правильны...
Canon: как выбрать...
Применение нового ...
Вирусный трафик
Процедура GetModeR...
Поиск решения на г...
Общее представлени...
Решение вэтом случ...
Водородная энергет...
Создание файла док...
Строковый класс об...
ВВЕДЕНИЕ В СТРУКТУРЫ
Лайв ставки на киб...
Разборка приставки...
Официальный сайт и...
QTABLE (ТАБЛИЦА ОЧ...
Обобщенное програм...
Программа складыва...
Статистика



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


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