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
答案 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;这意味着只有同一个包中存在的类才能访问它们。
如果它们在同一个包中,则两个类总是可以相互看到而无需导入。否则,类必须是公共的,才能被包外的另一个类访问,在这种情况下,是的,您必须使用导入。