Не удается получить доступ к классам в пакете по умолчанию - PullRequest
3 голосов
/ 14 февраля 2011

У меня проблема с пакетом по умолчанию. По сути, моя структура проекта состоит из трех основных классов, которые расширяют один абстрактный класс в пакете под названием моделирование. Вчера я сделал изменение имени в проекте, и теперь мои три основных класса автоматически помещаются в пакет по умолчанию, поэтому они не могут быть видны классом внутри пакета моделирования и наоборот. Для следующего кода

import simulation.*;

class SSQSim extends Simulation{

} 

Я получаю эти ошибки «Этот класс должен реализовывать унаследованный абстрактный метод Simulation.stop (), но не может переопределить его, поскольку он не виден из SSQSim. Либо сделайте тип абстрактным, либо унаследуйте унаследованный метод» «Тип симуляции не виден»

Заранее спасибо.

EDIT Проблема в том, что мне не нужно использовать какие-либо другие пакеты. Это в основном домашнее задание, и правила подачи довольно строгие: во-первых, я должен представить пакет «симуляция», который содержит абстрактный класс «Симуляция» с некоторыми методами, которые можно реализовать с помощью других классов. Эта часть в порядке.

Затем мне нужно создать три класса, которые импортируют пакет «симуляция» и расширяют его класс «Симуляция». Они специально сказали не помещать эти классы в какую-либо упаковку. Сначала все работало нормально, но после того, как я переименовал проект. Эти классы внезапно переместились в пакет по умолчанию, и теперь они дают мне эти ошибки.

Ответы [ 4 ]

2 голосов
/ 14 февраля 2011

Почему вы используете пакет по умолчанию, Из спецификации Java:

It is a compile time error to import a type from the unnamed package.

Таким образом, вы должны создать новый пакет с другим именем и добавить ваши классы или поместить их в тот же пакет, что и ваш класси сделать необходимый импорт.

1 голос
/ 14 февраля 2011

Как вы создаете свои классы?Когда вы создаете новый класс, Eclipse показывает диалог New Java Class.В этом диалоговом окне вы можете выбрать, в каком пакете создать новый класс:

enter image description here

Просто нажмите кнопку Browse, и вы сможете выбрать пакет.

image:(">

0 голосов
/ 14 февраля 2011

Пока это только подсказка, так как исходный код для всех классов не опубликован.Сообщение об ошибке подразумевает наличие абстрактного метода в родительском классе, который нельзя переопределить из-за потери видимости в дочернем классе.Обычно это происходит из-за использования спецификатора доступа по умолчанию («дружественного») или спецификатора частного доступа (который не имеет смысла, особенно если метод объявлен как абстрактный).Нужно будет использовать модификатор защищенного доступа на родительском, чтобы гарантировать, что метод теперь виден всем дочерним классам, независимо от того, присутствуют ли они в том же пакете или нет.не может «видеть» переопределяемый метод, поэтому компилятор выдает предупреждение, в котором сообщается о неизбежности определения, должен ли метод, определенный в родительском или дочернем элементе, использоваться во время выполнения.Что касается создания классов в пакете по умолчанию, всегда можно убедиться, что пакет указан при создании нового класса в соответствующем диалоговом окне (новом диалоге классов Java, в котором присутствует поле пакета).

0 голосов
/ 14 февраля 2011

Это связано с тем, что в сигнатуре метода Simulation.stop() упоминается некоторый класс, ограниченный пакетом (не публичный) для пакета simulation.

Вы решаете это либо

  1. Переместите SSQSim в пакет simulation, чтобы он мог обращаться к тем же классам, что и Simulation, или
  2. Создание классов, необходимых для расширения пакета Simulation class-public.

Чтобы переместить класс из одного пакета в другой в Eclipse, вы можете просто перетащить файл исходного кода в нужный пакет, и Eclipse соответствующим образом изменит код.


(Примечание. Как правило, не используйте пакет по умолчанию. Однако проблема, с которой вы столкнулись, может возникнуть, даже если вы избегаете пакета по умолчанию!)

...