在Python中__slots__的目的是什么——特别是当我想要使用它时,什么时候不使用它?

在Java中,在创建类和接口以及处理继承时,是否有明确的规则来确定何时使用每个访问修饰符,即默认的(包私有)、公共的、受保护的和私有的?