在Fork/Join框架中,RecursiveTask<T>的compute()方法被声明为protected,而不是包默认值,剩下的覆盖选项只包括protected和public (包默认值不会编译)。
选择protected而不是package default有什么原因吗?我很想知道,因为这可能会帮助我理解框架中我还不知道的一个方面。
发布于 2014-07-11 07:50:05
如果compute()在RecursiveTask<T>中有包访问权限,它就不能被覆盖。当一个方法覆盖另一个方法时,JLS §8.4.8.1会详细说明;如果超类中的方法有包访问权限,那么只有当它与超类在同一个包中时,子类中的compute()方法才会覆盖它。因为超类RecursiveTask<T>在java.util.concurrent中,所以只有当您的类也在java.util.concurrent中时,具体的子类才能覆盖它--您不想这样做,Java可能也不允许这样做。
https://stackoverflow.com/questions/24687927
复制相似问题