In C# I know of 3 differences between regular
classes and inner classes which can also form a relationship
relationship between an inner class and the outer class that contains
One difference is that inner classes can be declared as protected,
internal, protected internal, or private while normal classes cannot.
An inner class can access the static members of the containing outer class without using that classe's name.
Another difference is when the inner class accesses an instance of
the outer class, it can access that object's private members even if
they are not static.