package test.p1.p2 abstract class A { private[p2] def f2(): Unit protected def f3(): Unit private[p1] def f4(): Unit protected[p1] def f5(): Unit } abstract class OK1 extends A { private[p1] def f2(): Unit protected[p2] def f3(): Unit private[test] def f4(): Unit protected[test] def f5(): Unit } abstract class OK2 extends A { protected[p1] def f2(): Unit def f3(): Unit protected[p1] def f4(): Unit def f5(): Unit } abstract class Err1 extends A { private def f2(): Unit = () private[p2] def f3(): Unit = () private[p2] def f4(): Unit protected[p2] def f5(): Unit }