8.3.1 Overriding Indicators
An 
overriding_indicator 
is used to declare that an operation is intended to override (or not 
override) an inherited operation. 
 
Syntax
overriding_indicator ::= [
not] 
overriding 
Legality Rules
the operation shall be a primitive operation for 
some type;
if the 
overriding_indicator 
is 
overriding, then the operation shall override a homograph at 
the place of the declaration or body;
 
if the 
overriding_indicator 
is 
not overriding, then the operation shall not override any homograph 
(at any place). 
 
In addition to the places where 
Legality Rules normally apply, these rules also apply in the private 
part of an instance of a generic unit.
 
Examples
The use of 
overriding_indicators 
allows the detection of errors at compile-time that otherwise might not 
be detected at all. For instance, we might declare a security queue derived 
from the Queue interface of 3.9.4 as:
 
type Security_Queue is new Queue with record ...;
overriding
procedure Append(Q : in out Security_Queue; Person : in Person_Name);
overriding
procedure Remove_First(Q : in out Security_Queue; Person : in Person_Name);
overriding
function Cur_Count(Q : in Security_Queue) return Natural;
overriding
function Max_Count(Q : in Security_Queue) return Natural;
not overriding
procedure Arrest(Q : in out Security_Queue; Person : in Person_Name);
 The first four subprogram declarations guarantee 
that these subprograms will override the four subprograms inherited from 
the Queue interface. A misspelling in one of these subprograms will be 
detected by the implementation. Conversely, the declaration of Arrest 
guarantees that this is a new operation.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe