русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Частичные реализации


Дата добавления: 2015-01-08; просмотров: 520; Нарушение авторских прав


Как отмечалось выше, если класс, реализующий интерфейс, реализует не все методы этого интерфейса, то этот класс должен быть объявлен как абстрактный (abstract). Например:

ПРИМЕР

 

“Множественное” наследование в Java

Интерфейс, это не просто одна из форм абстрактного класса. В Java можно реализовать наследование «от многих», но только один из этих классов может иметь реализацию, так что проблемы, возникающие в C++, не возникают в Java, при комбинировании множества интерфейсов.

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

interface Intrf_A {

void fun_A();

}

interface Intrf_B {

void fun_B();

}

interface Intrf_C {

void fun_C();

}

class A {

public void fun_A () {}

}

 

class B extends A implements Intrf_A, Intrf_B, Intrf_C {

public void fun_B () {}

public void fun_C () {}

}

 

public class D {

static void t(Intrf_A x) { x. fun_A (); }

static void u(Intrf_B x) { x. fun_B (); }

static void v(Intrf_C x) { x. fun_C (); }

static void w(A x) { x. fun_A (); }

public static void main(String[] args) {

B h = new B();

t(h); // Treat - CanFight

u(h); // Treat - CanSwim

v(h); // Treat - CanFly

w(h); // Treat - ActionCharacter

}

} ///:~

В этом примере, класс B комбинирует конкретный класс A с интерфейсами Intrf_A, Intrf_B и Intrf_C. При этом класс должен быть указан первым, а только затем интерфейсы, в противном случае компилятор выдаст сообщение об ошибке.



Заметим, что сигнатура fun_A() одинаковая и в интерфейсе Intrf_A и в классе A, но fun_A() не определена в В. От интерфейса можно наследовать, но тогда получается еще один интерфейс. Для создания же класса на основе интерфейса он должен иметь все определения. И хотя класс В не предоставляет определения для fun_A(), это определение появляется автоматически вместе с классом А и создать объект от класса В становится возможным.

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

Необходимо отметить причину использования интерфейсов. Во-первых, возможность приведения к более, чем одному базовому типу. Во-вторых, в том же, в чем и причина использования абстрактных базовых классов: предотвращение создания объектов этого класса и понимания, что это всего лишь интерфейс. Возникает вопрос: что же лучше использовать? Интерфейс или абстрактный класс? Интерфейс содержит преимущества абстрактного класса и интерфейса, так что если нужно создать базовый класс без любых определений методов или переменных, то интерфейс предпочтительнее абстрактного класса. Если, же этот класс должен иметь определения методов и переменных, только тогда предлагается реализовать его как абстрактный класс или если это необходимо как обычный класс.

 



<== предыдущая лекция | следующая лекция ==>
Оператор implements | Расширение интерфейса


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.477 сек.