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

Абстрактные методы

Читайте также:
  1. II. Финансовые методы управления
  2. String - методы
  3. Актовый материал как исторический источник и методы их изучения
  4. Валовой внутренний продукт, его формы и методы измерения
  5. Виды и методы измерений
  6. Виды существующих рисков на предприятии и методы их снижения

Абстрактный метод указывает, что выполнение метода должно быть обеспечено в подклассе данного абстрактного класса.

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

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

abstract class Figure {

//...

abstract void area();

//...

}

class Rectangle {

void area(int a, int b) {return a*b;}

}

class Circle {

void area(double r) {return 3.14*r*r;}

}

Интерфейсы

В языке Java новый класс может расширять всего один суперкласс — такая модель носит название одиночного наследования.

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

Поэтому Java предоставляет возможность наследования без связанной с ним реализации. Для этого вместо типа class используется тип interface. Таким образом, интерфейсы наделяют Java возможностями множественного наследования.

Интерфейс в языке Java представляет собой "чисто абстрактный класс", т.е. класс, все методы которого являются абстрактными.

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

Общая форма интерфейса:

interface имя {

тип имя_метода1(список параметров);

тип имя_final1-переменной = значение;

}

Обратите внимание - у объявляемых в интерфейсе методов отсутствуют операторы тела. Объявление методов завершается символом; (точка с запятой).

В интерфейсе можно объявлять и переменные, при этом они неявно объявляются final - переменными.

public interface Drawable {

public double p = 3.14;

public void setColor(Color c);

public void setPosition(double x, double y);

public void draw(DrawWindow dw);

}

Это компилируется следующим образом:

javac Drawable.java

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

Класс может расширять только один базовый класс, но раскрывать он может несколько интерфейсов.

Если осуществляется более чем один интерфейс, их названия отделяются с помощью запятых:

public class DrawableRectangle extends Rectangle

implements Drawable, Fillable {

}

Между интерфейсами и абстрактными классами существует два важных отличия:

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

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

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

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

Методы интерфейса всегда являются открытыми. Все методы в интерфейсе должны иметь тип public. Они не могут быть статическими, поскольку статические методы всегда относятся к конкретному классу и никогда не бывают абстрактными, а интерфейс может включать только абстрактные методы.

С другой стороны, поля интерфейса всегда объявляются static и final. Они представляют собой константы, используемые при вызове методов.


Дата добавления: 2015-10-29; просмотров: 228 | Нарушение авторских прав


Читайте в этой же книге: Java в Internet | Первая программа на языке Java | Синтаксис языка | Типы данных языка Java | Вещественный тип данных | Поразрядные операторы | Троичный оператор | Операторы цикла do-while, while, for | Оператор continue | Определение методов |
<== предыдущая страница | следующая страница ==>
Перегрузка конструктора| Иерархия классов-исключений

mybiblioteka.su - 2015-2024 год. (0.007 сек.)