Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Абстрактные классы
Абстрактные классы
В данный момент базовый класс Employee скомпонован так, что он может поставлять своим потомкам защищенные члены-переменные, а также два виртуальных метода (GiveBonus() и DisplayStats()), которые могут переопределяться производным классом. Все это хорошо, но данный вариант программного кода имеет один недостаток: вы можете непосредственно создавать экземпляры базового класса Employee.
// Что же это значит?
Employee X = new Employee ();
В данном примере единственной целью базового класса Employee является определение общих полей и членов для всех подклассов. Вероятно, вы не предполагали, что кто-то будет непосредственно создавать экземпляры класса, поскольку тип Employee (работник) является слишком общим. Например, если я приду к вам и скажу "Я работаю!", то в ответ я, скорее всего, услышу вопрос "Кем вы работаете?" (консультантом, инструктором, ассистентом администратора, редактором, представителем Белого Дома и т.п.).
Ввиду того, что многие базовые классы оказываются чем-то вроде "небожителей", для нашего примера лучше всего запретить возможность непосредственного создания новых объектов Employee. В C# это можно сделать программными средствами, используя ключевое слово abstract.
// Обозначение класса Employee, как абстрактного,
// запрещает непосредственное создание его экземпляров.
abstract public class Employee {…}
Если вы теперь попытаетесь создать экземпляр класса Employee, то получите ошибку компиляции.
// Ошибка! Нельзя создать экземпляр абстрактного класса.
Employee X = new Employee();
Превосходно! К этому моменту мы построили очень интересную иерархию служащих. Мы добавим новые функциональные возможности в это приложение немного позже, когда будем рассматривать правила классификации в C#. Иерархия типов, определенных на данный момент, показана на рис. 4.9.
Исходный код. Проект Employees размещен в подкаталоге, соответствующем главе 4.
- 9.7.4. Иерархии классов и абстрактные классы
- 7.16. Абстрактные классы
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА JAVA 7. КЛАССЫ
- Абстрактные типы данных и скрытие информации
- Абстрактные предусловия
- 9.2. Классы и конструкторы
- 9.7. Подклассы
- 9.1. Классы и прототипы
- Классы сертификатов
- Статические классы
- Абстрактные базы как двоичные интерфейсы
- 9.8. Классы в ECMAScript 5