Поскольку, если бы это было разрешено, возможна следующая ситуация:
Class Sub наследуется от класса Parent. Родитель имеет открытый метод foo
, Sub делает этот метод закрытым. Теперь следующий код скомпилируется нормально, потому что объявленный тип bar
является Parent:
Parent bar = new Sub();
bar.foo();
Однако не ясно, как это должно вести себя. Одна из возможностей - позволить этому вызвать ошибку во время выполнения. Другим было бы просто разрешить это, что позволило бы вызвать закрытый метод извне, просто приведя к родительскому классу. Ни одна из этих альтернатив не является приемлемой, поэтому она не допускается.