A.4. Abstract types and Interfaces - JulTob/Ada GitHub Wiki

package P is
  type T is abstract tagged private;
  procedure Method (Self : T) is abstract;
private
 type T is abstract tagged record
    F1, F2 : Integer;
  end record;
end p;
type Root is tagged record
   F1 : Integer;
   end record;
procedure M1 (Self : Root);

type I1 is interface;
procedure M2 (Self : I1) is abstract;

type I2 is interface;
procedure M3 (Self : I2) is abstract;

type Child is new Root and I1 and I2 with record
  F2 : Integer;
  end record;

-- M1 implicitly inherited by Child
procedure M2 (Self : Child);
procedure M3 (Self : Child);