Interfaces may contain member type declarations (§8.5).
A member type declaration in an interface is implicitly
public. It is permitted to redundantly specify either or both of these modifiers.
It is a compile-time error if the same modifier appears more than once in a member type declaration in an interface.
If an interface declares a member type with a certain name, then the declaration of that type is said to hide any and all accessible declarations of member types with the same name in superinterfaces of the interface.
An interface inherits from its direct superinterfaces all the non-
private member types of the superinterfaces that are both accessible to code in the interface and not hidden by a declaration ...