Работает отлично. Чисто тоже, чб.

бник по Java "Определение интерфейса"это говоритЕсли вы не укажете, что интерфейс

Ваш интерфейс будет доступен только для классов, определенных в том же пакете, что и интерфейс.publicТем не менее, это

генерирует ошибки компилятора в

interface PPInterface {
    void foo();
    void bar();
}

class NewClass implements PPInterface {
    void foo() {}
    void bar() {}
}

 потому что я пытаюсь назначить более слабые права доступа; был публичным ». Таким образом, документация неверна, или я сделал что-то не так, или я неправильно истолковал документацию?NewClassЯ полагаю, мне не нужно использовать интерфейс - мне это нравится, потому что он хорошо организован.

Сам интерфейс может быть закрытым для пакета, а не методы в нем. Вы можете определить интерфейс, который может использоваться только (по имени) в пакете, в котором он определен, но его методы

Ответы на вопрос(3)

I  (хотя я могу ошибаться), что обсуждаемые здесь более слабые права доступа предназначены для а такжеfoo() методы вbar(), Все методы интерфейса неявноNewClass, но вpublic вы оставили их в частном порядке, что является более слабой гарантией, чемNewClass, измененияpublic читатьNewClassвероятно

class NewClass implements PPInterface{
    public void foo() {}
    public void bar() {}
}

 это исправлю.Действительно ... но я не хочу это исправлять .. Я хочу, чтобы они были частными. Документы были достаточно ясны, что вы могли бы сделать это, так что документы не так? Или это означает, что только объекты в пакете могут реализовывать интерфейс, но методы все еще общедоступны? (Я думаю, это ответ)

 templatetypedef26 янв. 2011 г., 06:38
@templatetypedef "также должен иметь эти конкретные функции, помеченные как частные". Вы имеете в виду отмеченный
 Pete26 янв. 2011 г., 06:36
@ Пит, я думаю, здесь есть две разные проблемы. Если оставить интерфейс пакета закрытым, единственные классы, которые могут ссылаться на интерфейс, должны находиться в одном пакете. Однако методы, определенные этим интерфейсом, неявно общедоступны, и поэтому любой класс, реализующий интерфейс, должен также иметь эти конкретные функции, помеченные как частные. Так что нет, документы не неправильные - в игре всего два отдельных уровня видимости.
 stillanoob07 мар. 2019 г., 08:52
общественности, правильно?что помогло мне обойти проблему единственного наследования:

У меня есть абстрактный D (пакет защищен интерфейс в C) расширяет B

а затем расширяет D

Работает отлично. Чисто тоже, чб.

В руководстве по Java написано, что у меня может быть закрытый для пакета интерфейс, но я не

Решение Вопроса

  методы, которые он определяет, должны бытьpublic, Ключевым моментом здесь является то, что это интерфейсpublicтип это не видно за пределами пакета, а не методов. Документы не являются неправильными, потому что использование методов, определенных в интерфейсе, не то же самое, что использование самого интерфейса.Также имейте в виду, что при определении интерфейса, не добавляя

 прежде чем определение метода ничего не меняет, так как все методы неявноpublicЕсли класс (ы), который у вас есть, реализующий интерфейс, сами являются пакетно-закрытыми,public.

Несомненно, интерфейсные методы не являются проблемой. Конечно, вы могли бы также использовать абстрактный интерфейс вместо интерфейса, если проблема единственного наследования не мешает вам:publicТьфу, мы снова вынуждены взламывать абстрактные классы из-за ограничений доступа Java

abstract class Whatever {
  abstract void foo();
  abstract void bar();
}
 HesNotTheStig14 июн. 2017 г., 15:46
думать
 Koray Tugay22 нояб. 2016 г., 17:48
@KorayTugay: методы интерфейса всегда
 ColinD22 нояб. 2016 г., 18:33
имеет ли это практический эффект или нет. Но если, например, у вас есть закрытый для пакета тип, который реализует некоторый открытый интерфейс или расширяет некоторый открытый тип,public методы в этом классе / интерфейсе, которые переопределяют методы из открытого типа, могут использоваться вне пакета.publicЯ считаю это одним из самых больших неудобств Java. Я хочу определить интерфейс, который позволяет беспрепятственный доступ к членам коллекции. Однако, когда открытый класс реализует этот интерфейс, я не хочу, чтобы другие за пределами пакета могли вызывать эти непроверенные методы. Единственный вариант - использовать абстрактный класс с одним наследованием или класс-оболочку. Если честно, мне не нравится ни один из этих вариантов.

Ваш ответ на вопрос