Java包 - 引用来自不同包的类

时间:2013-01-29 21:35:10

标签: java package

在(默认包)中,我有一个名为“Bird”的类,它有一个名为“dialog”的方法。

我可以在同一个包中创建一个名为Class1的类,如下所示:

public class Class1
{
    public static void main(String[] args) 
    {
        Bird b = new Bird("Alexander",true,5);
        b.dialog("tweet!");
    }
}

这实际上有效,我实际上可以在控制台中看到tweet!

我的问题是:如果Class1位于包Fundamental中,我需要在代码中添加什么(而类Bird位于“默认包”中) ? 我收到一个错误:在这种情况下“鸟类型未被识别”。我应该以某种方式表明包裹。

附带问题:1。什么是类路径?如何更改?我已经看到这个术语在几个与包相关的讨论的背景下被模糊地使用,但没有一个像我刚才给出的明确的例子。 2.我见过多次名为xxx.bla.zzz的软件包 - 这是标准吗?我通常只使用一个通用名称(不是三个分隔的。) 我理解一个包是Java替代其他语言的命名空间。如果有几个解决方案值得一提,我会很感激。谢谢!

3 个答案:

答案 0 :(得分:10)

您永远不应该使用默认包,这不是一个好习惯,也不能从默认包中导入类。始终声明您的包结构。

在第一行的课程Bird中添加:

package animals;

在Class1.java的第一行写下您的包名

package foo;

import animals.Bird;

请注意,要使其工作,班级Bird和班级Class1应分别位于“animals”文件夹和“foo”文件夹中

答案 1 :(得分:3)

根据JLS(第7.5章。导入声明http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5),无法从默认(未命名)包导入

未命名包中的类型(第7.4.2节)没有规范名称,因此在每种导入声明中对规范名称的要求意味着(a)无法导入未命名包中的类型, (b)无法导入未命名包中类型的静态成员。因此,§7.5.1,§7.5.2,§7.5.3和§7.5.4都要求在未命名的包中导入类型(或其静态成员)的任何尝试都存在编译时错误。

答案 2 :(得分:2)

到目前为止提供的解决方案是有用的,但如果您使用NetBeans,则解决问题非常简单。右键单击项目并选择打开新包。 NetBeans为您提供了用于创建新包的Dialog。这就是诀窍所​​在,注意:确保您的新项目名称不以与其他软件包相同的名称开头,以便唯一标识新软件包。例如,为新软件包添加一个名称

newPackage;

然后,您可以在您希望使用该包的类文件中使用import语句:

import newPackage.SecondClass;

您可以使用代码完成ctr + spaceBar来确保包装清晰可见。

我希望这很简单。 check out this screenshot