Нет, вы не можете уменьшить видимость метода в интерфейсе.Что бы вы ожидали, если бы кто-то написал:
C foo = new A();
foo.methodDeclaredPrivateInA();
?Что касается компилятора, то все, что имеет отношение к реализации C
, имеет право вызывать любые методы внутри него - вот в чем суть принципа подстановки Лискова.
Если вы не хотитечтобы реализовать весь открытый интерфейс, не реализуйте его или не создавайте исключения, если это абсолютно необходимо.
Стоит также отметить, что доступность, предоставляемая в исходном коде, редко является хорошей безопасностью мера.Если ваш класс работает на виртуальной машине, которая, в свою очередь, определяет свои собственные права доступа, любой может сделать членов видимыми с помощью отражения.