Цельработы:формирование навыков создания абстрактных классов и ин- терфейсов.
Введение
Абстрактные (abstract) классы предназначены для представления общих понятий, которые предполагается конкретизировать в производных классах. Абстрактный класс задает общее поведение для всей иерархии, при этом его методы могут не выполнять никаких действий. Такие методы называются аб- страктными, они имеют пустое тело и объявляются с модификатором abstract. Абстрактный метод – это виртуальный метод без реализации. Абстракт- ный метод должен быть переопределен в любом неабстрактном производном классе. Если в классе есть хотя бы один абстрактный метод, весь класс также должен быть объявлен как абстрактный. Абстрактный класс может содержать и полностью определенные методы (в отличие от интерфейса).
Абстрактный класс не разрешает создавать свои экземпляры. Он служит только для порождения потомков. Как правило, в нем лишь объявляются мето- ды, которые каждый из потомков будет реализовывать по-своему. Это бывает полезным, если использовать переопределение методов базового класса в по- томках затруднительно или неэффективно. Например, имеет смысл объявить класс Tovarабстрактным. В нем задать общие для всех товаров поля: name (название), price (цена), summa (стоимость). А вот конкретные характерис- тики для каждого вида товаров и соответствующих им классов-потомков будут разные: для класса Book (книги) это количество экземпляров (поле kvo), для класса Сandy (конфеты) – это граммы (поле ves), для класса Tkany (ткани) – это метры (поле dlina). Метод Calc (расчет) будет для каждого товара свой. Поэтому в базовом классе его надо объявить абстрактным (из-за чего и класс Tovar приходится делать абстрактным), а у каждого потомка реализовать по- своему. В то же время базовый абстрактный класс может содержать и обычные методы, например PrintSum(печать суммы), который наследуются всеми по- томками без изменений.
Интерфейс – крайний случай абстрактного класса, у которого нет полей и ни один метод не реализован. В нем объявляются только абстрактные методы, которые должны быть реализованы в производных классах.
Синтаксис интерфейса аналогичен синтаксису класса:
[ модификаторы ] interface Имя [ :предки ]