2011-02-14 115 views
3

我对默认包有问题。 基本上我的项目结构由三个主类组成,这三个主类在一个叫做模拟的包中扩展了一个抽象类。 昨天我在项目中做了一个名称更改,现在我的三个主类自动放入默认包中,所以它们不能被仿真包中的类看到,反之亦然。 对于下面的代码无法访问默认包中的类

import simulation.*; 

class SSQSim extends Simulation{ 

} 

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

在此先感谢您。

编辑 问题是我不必使用任何其他软件包。这基本上是家庭作业,提交规则非常严格:首先,我必须提交包含抽象类“模拟”的包“模拟”,并使用其他类的帮助来实现某些方法。这部分没有问题。

然后,我必须创建三个类,它们导入包“模拟”并扩展它的类“模拟”。他们明确表示不要将这些类放在任何包中。起初,他们都运行良好,但在我重命名项目后。这些类突然进入默认包,现在他们给我这些错误。

+3

作为一般规则,不要使用默认包。 – 2011-02-14 15:11:21

+0

是默认包中的`SSQSim`吗? (是你提供完整文件的酸码吗?) – aioobe 2011-02-14 15:11:49

+0

那么你的问题是什么? – 2011-02-14 15:14:44

回答

1

你是如何创建你的课程?当您创建一个新类时,Eclipse将显示一个New Java Class对话框。此对话框让你选择在创建新的类,它包:

enter image description here

只要按一下按钮,Browse,你就可以选择一个包。

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

0

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

您可以通过两种

  1. 移动SSQSimsimulation包解决它,所以它可以访问相同的类作为Simulation,或
  2. 使延长Simulation类包公开所需的类。

从一个包将类移动到另一个在蚀,就可以简单地拖动源代码文件到所需的包,并蚀将相应地重构代码。


(A侧面说明:作为一个经验法则,不要使用默认的包,你跑进然而,问题,即使你避免默认包发生!)

1

为什么使用默认的包,从Java规格:

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

所以,你必须创建一个新包使用不同的名称,并添加您的类或把它们放在同一个包中的类,并做必要的进口。

0

这只是一个暗示,因为所有类的源代码都没有发布。错误消息意味着在父类中存在抽象方法,由于子类中可见性的丢失而无法重写。通常,这是由于使用默认访问说明符(“friendly”)或私有访问说明符(这是无意义的,特别是在方法被声明为抽象的情况下)。必须在父级上使用受保护的访问修饰符,以确保该方法现在对所有子类都可见,而不管它们是否存在于同一个包中。简而言之,如果孩子不能“看到”被重写的方法,那么编译器会发出一个警告,通知有关不可避免地推断在父代或孩子中定义的方法是否应该在运行时使用的警告。

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