可以从java中的子包类访问的父包类?

时间:2010-08-25 09:55:50

标签: java

在可从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用一个例子解释。

6 个答案:

答案 0 :(得分:15)

Java无法识别子包的概念。就Java而言,包aa.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)

默认类只能在子包

中使用