Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
return (char) 0;
}
getloc++;
return q[getloc];
}
}
В данной реализации при попытке поместить в заполненную очередь еще один элемент создается новый массив, размеры которого в два раза превышают размеры исходного, текущее содержимое очереди копируется в новый массив, а ссылка на него помещается в переменную q.
Для того чтобы продемонстрировать все три реализации интерфейса ICharQ, добавьте в файл IQDemo.java приведенный ниже класс, в котором для доступа ко всем трем очередям используется переменная ссылки на интерфейс ICharQ.
// Демонстрация трех реализаций интерфейса ICharQ.
class IQDemo {
public static void main(String args[]) {
FixedQueue ql = new FixedQueue(10);
DynQueue q2 = new DynQueue(5);
CircularQueue q3 = new CircularQueue(10);
ICharQ iQ;
char ch;
int i;
iQ = q1;
// поместить ряд символов в очередь фиксированного размера
for(i=0; i < 10; i++)
iQ.put((char) ('A1 + i) ) ;
// отобразить содержимое очереди
System.out.print("Contents of fixed queue: ");
for(i=0; i < 10; i++) {
ch = iQ. get () ;
System.out.print(ch);
}
System.out.println ();
iQ = q2;
// поместить ряд символов в динамическую очередь
for (i=0; i < 10; i++)
iQ.put((char) ('Z1 - i));
// отобразить содержимое очереди
System.out.print("Contents of dynamic queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get ();
System.out.print(ch);
}
System.out.println ();
iQ = q3;
// поместить ряд символов в кольцевую очередь
for (i=0; i < 10; i++)
iQ.put((char) ('A1 + i));
// отобразить содержимое очереди
System.out.print("Contents of circular queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println();
// поместить больше символов в кольцевую очередь
for(i=10; i < 20; i++) -
iQ.put((char) (’A' + i));
// отобразить содержимое очереди
System.out.print("Contents of circular queue: ");
for(i=0; i < 10; i++) {
ch = iQ.get();
System.out.print(ch);
}
System.out.println("\nStore and consume from" +
" circular queue.");
// поместить символы в кольцевую очередь и извлечь их оттуда
for(i=0; i < 20; i++) {
iQ.put((char) ('A1 + i));
ch = iQ.get();
System.out.print(ch);
}
}
}
Выполнение этой программы дает следующий результат: Contents of fixed queue: ABCDEFGHIJ
Contents of dynamic queue: ZYXWVUTSRQ
Contents of circular queue: ABCDEFGHIJ
Contents of circular queue: KLMNOPQRST
Store and consume from circular queue.
ABCDEFGHIJKLMNOPQRST
А теперь попробуйте самостоятельно поупражняться в организации очередей. Создайте кольцевой вариант очереди DynQueue. Добавьте в интерфейс ICharQ метод reset (), устанавливающий очередь в исходное состояние. Создайте статический метод для копирования содержимого одной очереди в другую.
Переменные в интерфейсах
Как упоминалось выше, в интерфейсах могут объявляться переменные, но они неявно считаются как public, static и final. На первый взгляд, такие переменные находят лишь ограниченное применение, но это не совсем так. В крупных программах часто используются константы, описывающие размеры массивов, граничные и специальные значения и т.п. Для крупных программ обычно создается несколько исходных файлов, а следовательно, требуется удобный способ доступа к константам из любого файла. В Java решить эту задачу помогают интерфейсы.