The class Inner does not have a constructor defined at all. Therefore,
Java will provide a default constructor for Inner.
According to JLS - the modifier for the constructor will be the same as the modifier for the class (in this case protected).
Therefore the declaration of Inner is effectively:
protected class Inner{
protected Inner(){}
}
With this in mind it is pretty clear why SonOfOuter cannot access Inner, since the constructor of Inner is now protected.
To check, try defining a public constructor within Inner and see if your code compiles now.