在可从child packge类访问的java父包类中?请解释一下我?
示例 包A.A1.A2包含class sub 包A包含类sup
无论如何都要从sub访问sup?
请解释。
我尝试导入它将无法正常工作 例: 在程序目录结构之前 package1包含package1.java - > package2 - > package3包含PCheck.java
//package1.java
package package1;
public class package1{
public static void main(String[] args) {
}
}
class phelo{
phelo(){
int a;
System.out.println("hai fun freom package 1");
}
}
//PCheck.java;
package package1.package2.package3;
import package1.*; //to import package1.java
public class PCheck {
public static void main(String[] args) {
phelo obj=new phelo();
}
}
class helo{
helo(){
int a;
System.out.println("hai fun from package 3");
}
}
输出: 编译时错误:package package1.package2.package3不存在;
对于来自不同目录的导入类,我们使用import语句,但是这里我们需要从subpackage.i访问父包,尝试导入它将无法工作pls用一个例子解释。
答案 0 :(得分:15)
Java无法识别子包的概念。就Java而言,包a
和a.b
以及a.b.c
是无关的。它们只是名字。
因此,如果您想从a.b.SomeClass
访问a.b.c.SomeOtherClass
,则必须使用完全限定的类名,或将import
添加到SomeOtherClass
至于你没有编译的例子,我认为我们需要一个合适的MCVE才能理解。我的猜测是你的源代码树的文件组织错了......
问题还在于您尝试导入的类的可见性是错误的(包私有),但这不会导致编译器说包没有不存在,就像你说的那样。
答案 1 :(得分:6)
在java父包类中 从儿童包装类可以访问? 请解释一下我?
不是你想的那样。目录是分层的,但包只是区分名称。
如果孩子需要父包或其他层级以外的任何其他包,则只需要导入它。
这就是为什么import foo.*
不允许您访问所有子包名称的原因 - 包不像目录那样是分层的。
答案 2 :(得分:0)
只需导入它:
import A.sup;
答案 3 :(得分:0)
在a.b.c.SomeOtherClass的对象中:
List<String> tmp=new ArrayList<String>(Arrays.asList(this.getClass().getPackage().getName().split("\\.")));
tmp.remove(tmp.size()-1);
String parent_package_name=tmp.toString().replace(", ", ".").replaceAll("[\\[\\]]", "");
Class cls=Class.forName(parent_package_name+".SomeClass");
答案 4 :(得分:0)
所有答案似乎都错过了OP关于 package类的观点,因为每个人似乎都建议将类导入作为一种解决方法。
答案是::包级类(即,没有显式的访问级别修饰符)仅对完全相同的包可见。
https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
如果类没有修饰符(默认值,也称为package-private),则仅在其自己的包中可见
这实际上意味着父/子/外部程序包都无法查看该类。
答案 5 :(得分:-2)
默认类只能在包子包
中使用