Java导入非公共的自定义类

Java导入非公共的自定义类,java,eclipse,Java,Eclipse,这是我的Java项目结构。(对不起,我没有足够的声誉上传图片。:D) 我想将类从MyFrame.java导入Test.java 当MyFame.java下的MyFrame类为公共时: Practice └─src ├─main │ └─java │ ├─GridPrac.java │ └─MyFrame.java └─test └─java └─Test.java Eclipse不会生成错误通知 但是,当MyFame.java下的MyFrame类

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

我想将类从MyFrame.java导入Test.java

当MyFame.java下的MyFrame类为公共时:

Practice
└─src
  ├─main
  │ └─java
  │   ├─GridPrac.java
  │   └─MyFrame.java
  └─test
    └─java
      └─Test.java
Eclipse不会生成错误通知

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

public class MyFrame{...}
Eclipse生成一个错误通知

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

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

提前谢谢你


:D

问题是您的类都在默认包中,这是不鼓励的。Java也不允许您通过正常方式访问该包中的类。有关更多信息,请参阅此线程和链接的等级库:

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

因此,如果您想从
Test
访问
MyFrame
,并且两者都在不同的包中,
MyFrame
需要是公共的。在您的情况下,
src/main/java
将不会是一个包,除非您不遵守约定,我假设不是这样,否则您可能会有不同的名称。

如何从同一项目中的不同文件夹导入非公共类。答案是你不能。在Java中,外部类可以是公共类,也可以是默认类(无访问修饰符)。当一个类具有默认的可访问性时,它被称为包私有。这意味着包私有类只能对同一包内的其他类可见。比如说

class MyFrame{...}
任何人都可以访问公共类。但是,

package foo;

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


这是否回答了您的问题?

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


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

如果两个类都在同一个包中,则无需导入任何内容,文件夹结构无关紧要。如果您收到错误通知,您应该在问题中包含错误消息。
package bar;

class PackagePrivateClass {...}