Java导入非公共的自定义类

时间:2014-11-07 13:51:52

标签: java eclipse

Practice
└─src
  ├─main
  │ └─java
  │   ├─GridPrac.java
  │   └─MyFrame.java
  └─test
    └─java
      └─Test.java

这是我的Java项目结构。 (抱歉,我没有足够的声誉来上传图片。:D)

我想将MyFrame.java中的类导入Test.java。

MyFame.java下的MyFrame类是public:

public class MyFrame{...}

Eclipse不会生成错误通知。

但是,当MyFame.java下的MyFrame类不公开时,

class MyFrame{...}

Eclipse生成错误通知。

我可以从同一项目源文件夹下的不同自定义程序包导入公共类吗?

或者,如何从同一个Project中的不同文件夹导入非公共类?

提前谢谢!

:d

3 个答案:

答案 0 :(得分:3)

问题是您的类都在默认包中,不鼓励使用。 Java也不允许您通过常规方式访问该包中的类。有关更多信息,请参阅此主题和链接的规范:How to import a class from default package

除此之外,如果您的类不是公共的,那么它不应该被包外的类访问,也不会扩展该类。这是语言的一部分而不是日食的问题。

因此,如果您想从MyFrame访问Test并且两者都在不同的包中,MyFrame需要公开。在你的情况下,src/main/java不会是一个包,除非你不遵守惯例,我认为不是这种情况,否则你可能会有不同的名字。

答案 1 :(得分:0)

“如何从同一个Project中的不同文件夹导入非公共类?”。答案是你不能。在Java中,外部类可以是public或default(无访问修饰符)。当一个类具有默认的可访问性时,它被称为package-private。这意味着package-private类只能对同一个包中的其他类可见。例如

package foo;

public class PublicClass {...}

任何人都可以访问公共类。然而,

package bar;

class PackagePrivateClass {...}

只能由bar文件夹(或包)中的类访问。因此,PublicClass无法导入PackagePrivateClass,因为它们位于不同的包中。

这会回答你的问题吗?

答案 2 :(得分:0)

Java类/字段/方法的默认设置(当您不将其定义为公共等时)是“包私有”#39;这意味着只有同一个包中存在的类才能访问它们。

如果它们在同一个包中,则两个类总是可以相互看到而无需导入。否则,类必须是公共的,才能被包外的另一个类访问,在这种情况下,是的,您必须使用导入。