NEW обозначает  только то, что метод появился в этом рекорде, а не в предке.
Для заужения результата метода не нужен NEW.
> -- Цитата:
> If a method M is bound to a type T0, it is implicitly also bound to any type T1 which is an extension of T0. However, if a method M' (with the same name as M) is declared to be bound to T1, this overrides the binding of M to T1. M' is considered a redefinition of M for T1. The formal parameters of M and M' must match, except if M is a function returning a pointer type. In the latter case, the function result type of M' must be an extension of the function result type of M (covariance) (see App. A). If M and T1 are exported (see Chapter 4) M' must be exported too.
Вот тут компилер не позволил мне поставить NEW для B.New
## Код:
```
MODULE PrivMeth;
   TYPE
      A = EXTENSIBLE RECORD END;
      
      B = RECORD (A) END;
      
      ResultA = POINTER TO ABSTRACT RECORD END;
      
      ResultB = POINTER TO ABSTRACT RECORD(ResultA) END;
      
   PROCEDURE (VAR a: A) New(): ResultA, NEW, EXTENSIBLE;
   BEGIN
   RETURN NIL;
   END New;
   
   PROCEDURE (VAR b: B) New(): ResultB;
   BEGIN
   RETURN NIL;
   END New;
   
END PrivMeth.
```
