Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. ВЕЧНОЕ НАСЛЕДОВАНИЕ
  2. Инициализация с наследованием
  3. Использование final с наследованием
  4. Классы Java. Конструкторы, методы, наследование классов, управление доступом к методам и переменным класса, ключевые слова this и super.
  5. Множественное наследование в Java
  6. Наследование банковских вкладов
  7. Наследование белой пегости
  8. Наследование окраса колор-пойнт
  9. Наследование окрасов, сцепленных с полом

Интерфейс, это не просто одна из форм абстрактного класса. В 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 есть несколько методов, которые воспринимают в качестве аргументов различные интерфейсы и конкретные классы. Когда объект класса В уже создан, он может быть передан в качестве параметра в любой их этих методов, что в свою очередь означает, что он может быть приведен к базовому типу (к любому из вышеописанных интерфейсов).

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

 




Дата добавления: 2015-09-11; просмотров: 70 | Поможем написать вашу работу | Нарушение авторских прав

Типы данных | Одномерные массивы | Многомерные массивы | Вызов конструктора из конструктора | Ключевое слово static | Как работает сборщик мусора | Использование ключевого слова super | Абстрактные классы | Использование final с наследованием | Оператор import |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав