Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

TarasovVLJavaAndEclipse_08_PacketsInterfaces

.pdf
Скачиваний:
13
Добавлен:
08.04.2015
Размер:
1.27 Mб
Скачать

Рис. 13. Файлы откомпилированных классов

Два класса программы — Question и AskMe, реализуют интерфейс

SharedConstants, где определены константы NO, YES, MAYBE, SOON, LATER и NEVER. Внутри каждого класса код обращается к ним так, будто каждый класс прямо определил или унаследовал эти константы.

Данная программа использует один из стандартных классов Java — Random. Этот класс генерирует псевдослучайные числа. Он содержит несколько методов, которые позволяют получать случайные числа в различных формах. В представленном выше примере используется метод nextDoubie(). Он возвращает равномерно распределенные случайные числа в диапазоне от 0.0 до 1.0. Используя эти числа создается целое случайное число prob, принимающее значения от 0 до 99. Затем число prob используется для фомирования результата, возвращаемого методом ask(). В 30 случаях из 100 ask() возвращает NO и YES, в 15 случаях из 100 возвращает MAYBE и LATER, в 8 случаях -

SOON и в 2 случаях NEVER.

Вывод, выполненный этой программой:

Да

Позже

Нет

Нет

Нет

Вскоре

Да

Вскоре

Да

Позже

Результаты различны для каждого прогона программы.

Расширение интерфейсов

Один интерфейс может наследовать другой при помощи ключевого слова extends. Синтаксис — тот же самый, что для наследования классов. При реализации интерфейса, который наследует другой интерфейс, класс должен обеспечить реализацию для всех методов, определенных в цепочке наследования интерфейса. Например:

Программа 45. Расширение интерфейсов

//Файл IFExtend.java

//Один интерфейс расширяет другой.

interface А { void meth1(); void meth2();

}

//В теперь включает meth1() и meth2(), а сам он добавляет meth3().

interface В extends А { void meth3();

}

// Этот класс должен реализовать все из А и В. class MyClass implements В {

public void meth1() { System.out.println("Реализует meth1().");

}

public void meth2() { System.out.println("Реализует meth2().");

}

public void meth3() { System.out.println("Реализует meth3().");

}

}

class IFExtend {

public static void main (String arg[]) { MyClass ob = new MyClass (); ob.meth1();

ob.meth2();

ob.meth3();

}

}

В качестве эксперимента можно было бы удалить реализацию meth1() из MyClass. Это вызовет ошибку во время компиляции. Как было заявлено ранее, любой класс, который реализует интерфейс, должен реализовать все методы, определенные этим интерфейсом, включая те, что унаследованы от других интерфейсов.

Программа выводит:

Реализует meth1(). Реализует meth2(). Реализует meth3().

Пакеты или интерфейсы являются важной частью среды программирования Java. Фактически все реальные программы и апплеты, которые записываются на языке Java, будут содержаться в пакетах. Некоторые из них, вероятно, будут реализовать также и интерфейсы.