Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
yazyk_programmirovaniya_java.doc
Скачиваний:
38
Добавлен:
03.06.2015
Размер:
735.74 Кб
Скачать

Наследование. Интерфейсы.

Модель наследования в языке Java существенно отличается от модели C++. Во-первых, в Java нет множественного наследования. Таким образом, для каждого дочернего класса может быть только один базовый класс. При необходимости, однако, этот дочерний класс может реализовывать произвольное количество интерфейсов. Для ссылки на методы базового класса вы должны использовать ключевое слово super.

При необходимости можно вызвать в первой исполняемой строке конструктора дочернего класса конструктор базового класса (опять же с помощью ключевого слова super).

Во-вторых, в языке предусмотрены средства для запрета дальнейшего наследования (ключевое слово finalперед определением класса). В-третьих, в языке Java присутствует новое по отношению к C++ понятие интерфейса. Интерфейсы создаются при помощи ключевого слова interface таким же образом, что и классы. Однако в отличие от последних, интерфейсы являются аналогом абстрактных базовых классов без полей данных и предназначены только для определений набора методов для решения каких-либо задач, например, добавления компонент в контейнеры, организации списков, сортировки и так далее.

Можно создать свой класс на базе другого класса, указав при этом с помощью ключевого слова implements, что он реализует тот или иной интерфейс. При этом наряду с методами базового класса в созданном таким образом классе будут доступны методы, определенные в интерфейсе.

public interface Verbose {

public void drawOn (Graphics g);

public void printOn (OutputStream os);

}

public class Star extends Polygon implements Verbose {

public void drawOn (Graphics g) {

// Конкретная реализация отрисовки

}

public void printOn (OutputStream os) {

// Конкретная реализация печати

}

}

public class Text extends StringBuffer implements Verbose {

public void drawOn (Graphics g) {

// Конкретная реализация отрисовки

}

public void printOn (OutputStream os) {

// Конкретная реализация печати

}

}

public class Blackboard extends Canvas {

public void drawVerbose (Verbose d) {

Graphics g = getGraphics ();

d.drawOn (g);

}

}

Интерфейс представляет собой набор описаний методов. Этот пример был описан только что. Интерфейс Verboseсодержит два метода. Первый предназначен для рисования в графическом контексте, второй - для распечатки в выходной поток.

Класс Starпредставляет собой подкласс многоугольников (Polygon). Помимо прочего, мы хотим рисовать объекты этого класса на доске (Blackboard) и выводить их описание в файл.

Для объектов класса Textмы хотим иметь возможность начертать текст на доске и выводить его в файл.

Класс Blackboard- наследник классаCanvas, специально предназначенного для рисования. Как мы видим, этот класс с помощью единственного метода справляется с рисованием объектов, не имеющих общего предка (кроме классаObject).

Таким образом, с помощью интерфейсов можно компенсировать отсутствие множественного наследования. В контексте наследования интерфейс можно рассматривать как абстрактный класс, не содержащий данных.