Before, packets often (but not always) implemented interfaces of their enclosing ("parent") packets, where the implementations simply forwarded the calls to their parent. This obscures the meaning of a particular packet layer and introduces hundreds of lines of code duplication.
Now, packets only implement the types their particular layer represents. This facilitates a more type-safe interface and improves encapsulation.
Before, packets often (but not always) implemented interfaces of their enclosing ("parent") packets, where the implementations simply forwarded the calls to their parent. This obscures the meaning of a particular packet layer and introduces hundreds of lines of code duplication.
Now, packets only implement the types their particular layer represents. This facilitates a more type-safe interface and improves encapsulation.