Why wouldn't they be able to call them? private
restricts access to the same class. The static method is in the same class. So it has access to the private method.
Access modifiers work at the class level, not at the instance level. It they worked at the instance level, you couldn't write static factory methods (calling private constructors and initialization methods), equals()
methods and compareTo
methods (comparing private fields of two instances), etc.