Both Segment types share the same interface, based on `SegmentInterface`, External callers only need to care about the behaviour of the following interface as function declarations and corresponding constructor:
In principle, the reusable code logic of growing / sealed is written into the 'SegmentInternalInterface' as far as possible. The different part of two classes contain more different parts