Почему подпакеты не могут видеть закрытые классы пакетов? - PullRequest
8 голосов
/ 22 марта 2010

Хорошо, у меня есть такая структура проекта:

пакет A.B

  • класс SuperClass (этот класс помечен как закрытый пакет)

пакет A.B.C

  • класс SubClass (наследуется от суперкласса)

Я бы предпочел не делать SuperClass публично видимым ... Это действительно просто служебный класс для этого конкретного проекта (A.B).

Мне кажется, что подкласс должен видеть SuperClass, потому что пакет A.B.C является подпакетом A.B ... но это не так.

Как лучше всего решить эту проблему? Я не думаю, что имеет смысл перемещать все в A.B.C до A.B или перемещать A.B до A.B.C ... главным образом потому, что, вероятно, будет A.B.D, который также наследует от материала в A.B ...

Я немного новичок в Java, так что будьте добры: D (я парень из C ++ и .NET)

Ответы [ 3 ]

9 голосов
/ 22 марта 2010

Пакеты являются уникальными идентификаторами. Вы не можете заставить их следовать правилам наследования. Пакет и подпакеты не аналогичны классам супер и суб.

Я не вижу каких-либо недостатков в том, чтобы сделать класс, который вы хотели использовать в подпакете, видимым для внешнего мира. Мне было бы интересно узнать, как этот критерий обрабатывается в C ++ /. Net (так как я являюсь Java-парнем :))

6 голосов
/ 22 марта 2010

Лучше всего объявить (по умолчанию) конструктор (ы) SuperClass как protected. Таким образом, только классы в одном и том же пакете и подклассах, независимо от пакета, могут создавать его экземпляры и расширять его.

0 голосов
/ 22 марта 2010

Почему бы не поместить их в один и тот же уровень упаковки?

Не могли бы вы как-то использовать композицию вместо наследования?Я пытался сделать больше сам после прочтения Effective Java.Не уверен, что это возможно, учитывая ваши потребности, но, возможно, стоит подумать.

Удачи.

...