无法访问默认包中的类

时间:2011-02-14 15:09:04

标签: java eclipse packages

我的默认包有问题。 基本上我的项目结构包含三个主要类,它们在一个名为simulation的包中扩展一个抽象类。 昨天我在项目中进行了名称更改,现在我的三个主要类自动放入默认包中,因此模拟包中的类无法看到它们,反之亦然。 对于以下代码

import simulation.*;

class SSQSim extends Simulation{

} 

我收到这些错误 “此类必须实现继承的抽象方法Simulation.stop(),但不能覆盖它,因为它在SSQSim中不可见。要么使类型为abstract,要么使继承的方法可见” “模拟类型不可见”

提前谢谢。

修改 问题是我不必使用任何其他包。它基本上是家庭作业,提交的规则非常严格:首先,我必须提交包含抽象类“模拟”的“模拟”包,并在其他类的帮助下实现一些方法。这部分很好。

然后,我必须创建三个类导入包“simulation”并扩展其类“Simulation”。他们特意说不要把这些类放在任何包中。起初,他们都运行良好,但在我重新命名该项目之后。这些类突然进入默认包,现在他们给了我这些错误。

4 个答案:

答案 0 :(得分:2)

为什么使用默认包,来自java规范:

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

因此,您必须创建一个具有不同名称的新包,并添加您的类或将它们放在与您的类相同的包中,并执行所需的导入。

答案 1 :(得分:1)

你是如何创建课程的?创建新类时,Eclipse会显示New Java Class对话框。此对话框允许您选择在以下位置创建新类的包:

enter image description here

只需点击Browse按钮,您就可以选择一个套餐。

enter image description here no i do not like image descriptions >:(

答案 2 :(得分:0)

这是因为Simulation.stop()方法的签名提到了一些包限制(非公开)到simulation包的类。

你可以通过

来解决它
  1. SSQSim移至simulation包,以便它可以访问与Simulation相同的类,或
  2. 制作扩展Simulation类package-public。
  3. 所需的类

    要在eclipse中将类从一个包移动到另一个包,只需将源代码文件拖到所需的包中,eclipse就会相应地重构代码。


    (附注:根据经验,不要使用默认包。但是,即使您避开默认包,也会遇到问题!)

答案 3 :(得分:0)

这只是一个提示,因为所有类的源代码都没有发布。该错误消息暗示父类中存在抽象方法,由于子类中的可见性丢失而无法覆盖该抽象方法。通常,这是由于使用了默认访问说明符(“友好”)或私有访问说明符(这是没有意义的,特别是如果该方法被声明为抽象)。必须在父级上使用受保护的访问修饰符,以确保该方法现在对所有子类都可见,而不管它们是否存在于同一个包中。

简而言之,如果孩子无法“看到”正在被覆盖的方法,那么编译器会发出一个警告,告知必须推断出父或子中定义的方法是否应该在运行时使用。

就Eclipse在默认包中创建类的行为而言,可以始终确保在相应的对话框中创建新类时指定包(新的Java类对话框,其中包含包字段)