![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Типизация при наследовании
Замечательная гибкость, обеспечиваемая наследованием, не связана с потерей надежности, поскольку используется статическая проверка типов, гарантирующая во время компиляции отсутствие некорректных комбинаций типов во время выполнения.
Согласованность типов
Наследование согласовано с системой типов. Основные правила легко объяснить на приведенном выше примере. Предположим, что имеются следующие объявления:
p: POLYGON
r: RECTANGLE
Выделим в приведенной выше иерархии нужный фрагмент (рис. 14.6). Тогда законны следующие выражения: [x]. p.perimeter: никаких проблем, поскольку perimeter определен для многоугольников; [x]. p.vertices, p.translate (...), p.rotate (...) с корректными аргументами; [x]. r.diagonal, r.side1, r.side2: эти три компонента объявлены на уровне RECTANGLE или QUADRANGLE; [x]. r.vertices, r.translate (...), r.rotate (...): эти компоненты объявлены на уровне POLYGON или еще выше и поэтому применимы к прямоугольникам, наследующим все компоненты многоугольников; [x]. r.perimeter: то же, что и в предыдущем случае. Но у вызываемой здесь функции имеется новое определение в классе RECTANGLE, так что она отличается от функции с тем же именем из класса POLYGON. Рис. 14.6. Фрагмент иерархии геометрических фигур А следующие вызовы компонентов незаконны, так как эти компоненты недоступны на уровне многоугольника:
p.side1 p.side2 p.diagonal
Это рассмотрение основано на первом фундаментальном правиле типизации:
|