Переменные в интерфейсах

Интерфейсы можно применять для импорта совместно используемых констант в несколько классов посредством простого объявления интерфейса, который содержит переменные, инициализированные нужными значениями. При включении интерфейса в класс (т.е. при "реализации" интерфейса) имена всех этих переменных будут помещены в область констант. (Это аналогично использованию в программе C/C++ заголовочного файла для создания большого числа констант типа #def ine или объявлений const.) Если интерфейс не содержит никаких методов, любой класс, который включает в себя такой интерфейс, в действительности ничего не реализует. Это равносильно тому, что класс импортировал бы постоянные поля в пространство имен класса в качестве переменных типа final. В следующем примере эта технология применяется для реализации автоматизированной "системы принятия решений".

import Java.util.Random;
interface SharedConstants {
int N0=0;
int YES = 1;
int MAYBE = 2;
int LATER = 3;
int SOON = 4;
int NEVER = 5;
}
class Question implements SharedConstants {
Random rand = new Random () ;
int ask() {
int prob = (int) (100 * rand.nextDouble());
if (prob < 30)
return NO; // 30%
else if (prob < 60)
return YES; // 30%
else if (prob < 75)
return LATER; // 15%
else if (prob < 98)
return SOON; // 13%
else
return NEVER; // 2%
}
)
class AskMe implements SharedConstants {
static void answer(int result) {
switch(result) { case NO:
System.out.println("Нет");
break; case YES:
System.out.println("Да");
break; case MAYBE:
System.out.println("Возможно");
break; case LATER:
System.out.println("Позднее");
break; case SOON:
System.out.println("Вскоре");
break; case NEVER:
System.out.println("Никогда");
break;
}
}
public static void main(String args[]) {
Question q = new Question();
answer (q.ask () } ;
answer(q.ask());
answer(q.ask());
answer (q.ask () } ;
}
}

Обратите внимание, что в этой программе использован один из стандартных Java-классов — Random. Этот класс генерирует псевдослучайные числа. Он содержит несколько методов, которые позволяют получать случайные числа в требуемой программой форме. В этом примере применяется метод nextDouble (), который возвращает случайные числа в диапазоне от 0,0 до 1,0.

В приведенном примере программы два класса Question и AskMe реализуют интерфейс SharedConstants, в котором определены константы N0 (Нет), YES (Да), MAYBE (Возможно), SOON (Вскоре), LATER (Позднее) и NEVER (Никогда). Код внутри каждого класса ссылается на эти константы так, как если бы каждый класс определял или наследовал их непосредственно. Ниже показан вывод, полученный в результате тестового выполнения этой программы. Обратите внимание, что при каждом запуске результаты выполнения программы будут различными.

Позднее
Вскоре
Нет
Да




Rambler's Top100