UNIT UnitA;

   INTERFACE {$classes+}

      USES {$u-} {$u TestInit/UnitB} UnitB,
                 {$u TestInit/UnitC} UnitC;

      TYPE
         Class2 = SUBCLASS OF Class1
                     Field1, Field2: Integer;
                     Field3: Integer;
                     FUNCTION Create: Class2;
                    {PROCEDURE Proc1;}         {override of class1 proc}
                     PROCEDURE Proc2;
                  END;

         Class4 = SUBCLASS OF Class3
                     FUNCTION Create: Class4;
                     PROCEDURE ProcX;
                  END;

{aaa}IMPLEMENTATION

     METHODS OF Class2

        FUNCTION Create{: Class2};
           BEGIN {Create}
           END; {Create}

        PROCEDURE {class2 override} Proc1;
           BEGIN {Proc1 override}
           END; {Proc1}

        PROCEDURE Proc2;
           BEGIN {Proc2}
           END; {Proc2}
     END;

    METHODS OF Class4;

       FUNCTION Create{: Class4};
          BEGIN {Create}
          END; {Create}

        PROCEDURE ProcX;

           VAR
              c3: Class3;

           BEGIN {ProcX}
              class3.procA;
              class3.procB;
              c3.ProcC;
           END; {ProcX}
     END;

END.

