package Parent is
   type Root is abstract tagged null record;
   procedure Prim1 (Obj : Root) is abstract;
   procedure Prim2 (Obj : Root);
   function  Prim3 (Obj : Root) return Natural;

   type DT is new Root with null record;
   overriding procedure Prim1 (Obj : DT);
   overriding function  Prim3 (Obj : DT) return Natural;
   procedure Prim4 (Obj : DT);  --  New
   --  Prim2 is inherited

   type Grand_Child is new DT with null record;
   procedure Prim5 (Self : Grand_Child); --  New

end Parent;
