Перечисления наследуются от Enum

Хотя вы не можете наследовать суперкласс при объявлении enum, все перечисления автоматически наследуют java.lang.Enum. Этот класс определяет несколько методов, доступных к использованию только всеми перечислениями. Класс Enum детально рассматривается во второй части книги, но три из его методов требуют описания прямо сейчас.

Вы можете получить значение, которое указывает позицию константы в списке констант перечисления. Это называется порядковым значением (ordinal value) и извлекается с помощью вызова метода ordinal (), показанного ниже: final int ordinal ()

Он возвращает порядковое значение вызывающей константы. Порядковые значения начинаются с нуля. То есть в перечислении Apple Johnatan имеет порядковое значение нуль, GoldenDel имеет порядковое значение 1, RedDel — 2 и так далее. vВы можете сравнить порядковые значения двух констант одного и того же перечисления с помощью метода compareTo (). Он имеет следующую общую форму:

final int compareTo(тип_enum е)

Здесь тип_enum — тип перечисления, а е — константа, которую нужно сравнить с вызывающей константой. Помните, что вызывающая константа и е должны относиться к одному перечислению. Если вызывающая константа имеет порядковое значение меньше чем е, то compareTo () возвращает отрицательное значение. Если два порядковых значения одинаковы, возвращается ноль. Если вызывающая константа имеет порядковое значение больше чем е, то возвращается положительное значение.

Вы можете сравнить на эквивалентность перечислимую константу с любым другим объектом, используя equals () — переопределенный метод equals () класса Object. Хотя equals () может сравнивать перечислимые константы с любым другим объектом, эти два объекта будут эквивалентны только в случае, если оба они являются ссылкой на одну и ту же константу из одного и того же перечисления. Простое совпадение порядковых значений не заставит equals () вернуть true, если две константы принадлежат разным перечислениям.

Помните, что вы можете сравнивать две ссылки перечислений на эквивалентность, используя операцию ==.

В следующей программе демонстрируется применение методов ordinal (), compareTo () и equals ().

// Демонстрация ordinal (), compareTo() и equals!) .
// Перечисление сортов яблок.
enum Apple {
Jonathan, GoldenDel, RedDel, Winesap, Cortland
}
class EnumDemo4 {
public static void main(String args[]) {
Apple ар, ap2, ap3;
// Получить все порядковые значения с помощью ordinal().
System.out.println("Вот все константы " + " и их порядковые значения: ") ;
for(Apple а : Apple.values())
System.out.println(а + " " + a.ordinal());
ap = Apple.RedDel;
ap2 = Apple.GoldenDel;
ap3 = Apple.RedDel;
System.out.println() ;
// Демонстрация compareToО и equals()
if(ap.compareTo(ap2) < 0)
System, out .println (ар + " идет перед " + ap2) ;
if(ap.compareTo(ap2) > 0)
System, out .println (ap2 + " идет перед " + ар);
if(ap.compareTo(арЗ) == 0)
System.out.println(ар + " эквивалентно " + арЗ) ;
System.out.println();
if(ap.equals(ap2))
System.out.println("Error! ") ;
if(ap.equals(ap3))
System, out .println (ap + " equals " + ap3) ;
if (ар == арЗ) {
System.out.println(ap + " == " + арЗ) ;
}
}

Ниже показан вывод этой программы.

Вот все константы и их порядковые значения:

Jonathan 0
GoldenDel 1
RedDel 2
Winesap 3v Cortland 4
GoldenDel идет перед RedDel
RedDel эквивалентно RedDel
RedDel эквивалентно RedDel
RedDel == RedDel