Абстрактные базовые классы и интерфейсы java. Абстрактные классы и абстрактные методы

Страницы работы

Фрагмент текста работы

Надпись: Цель:
Эффективное использование  особенностей представления виртуальных сущностей для разработки приложений в JAVA.
Основные задачи:
-	Ознакомиться с соответствующими языковыми конструкциями;
-	Изучить особенности их применения;
Освоить использование абстрактных классов  и интерфейсов для решения практических задач на JAVA
СОДЕРЖАНИЕ:
-	Абстрактные классы;
-	Абстрактные методы;
-	Интерфейсы JAVA;
-	Пример использования.

Тема_05    :        АБСТРАКТНЫЕ БАЗОВЫЕ КЛАССЫ И  ИНТЕРФЕЙСЫ JAVA

1)  Абстрактные классы;

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

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

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

Абстрактные методы объявляются при помощи ключевого слова abstract  следующим образом:

abstractvoidmy_f1();

Тело метода определяется в подклассах (конструкторы и статические методы не могут определяться как abstract).

Абстрактные методы удобно использовать если необходимо, чтобы  некоторый метод присутствовал во всех классах, но во всех классах имел разную реализацию. Например, у нас может быть много типов работников (директора, программисты, бухгалтера, ...), и все классы для этих типов являются  потомками базового класса worker (в классе worker описаны общие атрибуты такие как: возраст, имя, телефон и т. п., поэтому дублировать их во всех классах нет смысла). Но некоторые методы должны работать по-разному. Например, это может быть метод setSalary() для начисления зарплаты. Для работников с почасовой системой оплаты способ будет один, для совместителей - другой, для постоянных работников - третий.

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

Пример:

abstract class worker           //абстрактный класс

{    protected int Age;

    public String Name;

    abstract public void setSalary(int newSalary);

}

classbossextendsworker//потомок абстрактного (базововго) класса

{        //Пишем реализацию абстрактного метода родительского класса

public void setSalary(int newSalary)

          {

                   if(newSalary>=0)

                   Salary=newSalary;

                   else

                   Salary=3000;   

          }

    //... другие элементы класса

}

class еngineerextendsworker//потомок абстрактного класса

{        //Пишем реализацию абстрактного метода родительского класса

public void setSalary(int newSalary)

    {    if(newAge>=0)

Salary=newSalary;

else

Salary=2500;   

}

}

Здесь объявлен класс worker, написали в нем абстрактный метод setSalary, и объявили два класса-потомка класса worker - классы boss и еngineer. В каждым из их мы пишем свою реализацию для метода setSalary.

Обратите внимание, что если объявляется некоторый метод класса абстрактным, то и весь класс надо объявить абстрактным:

abstract class worker

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

Похожие материалы

Информация о работе