如何在其他程序包中访问非公共类的非公共字段?

时间:2019-01-30 17:10:23

标签: java

如何在其他程序包中访问非公共类的非公共字段?

我在非公共类下面,我想从其他包中的类调用getString。我该怎么办?

class ABC{
   String getString(){
     return "ABC"
   }
}

1 个答案:

答案 0 :(得分:0)

这就是我们在Java中称为access-level的情况。

该文档实际上很棒,您可以here找到它。 请参阅下表(从文档中复制)。

  • 修饰符->指的是publicprivate<no modiefier>protected
  • 作用域->指的是您尝试访问的字段(例如classsubclass等)。
  • Y ->表示可以从特定范围访问字段。
  • N ->表示无法从特定范围访问字段。

访问权限级别

+--------------------------------------------------+
| Modifier    | Class | Package | Subclass | World |
|-------------|-------|---------|----------|-------|
| public      |   Y   |    Y    |    Y     |   Y   |
|-------------|-------|---------|----------|-------|
| protected   |   Y   |    Y    |    Y     |   N   |
|-------------|-------|---------|----------|-------|
| no modifier |   Y   |    Y    |    N     |   N   |
|-------------|-------|---------|----------|-------|
| private     |   Y   |    N    |    N     |   N   |
+--------------------------------------------------+
  

这实际上是一个非常有趣的事实,即不添加修饰符   您的代码实际上比使用protected修饰符更安全(与'world'隔离)。

要使一个类(或方法)隐藏在世界其他地方,除了它自己的包之外,您不给它修饰符。就像我下面用class ABC展示的那样。

一种可能的解决方案是,在同一包中创建另一个类,该类只能访问您想让世界其他地方看到的字段。

package myPackage;

class ABC{
//implementation
}

package myPackage;

public class XYZ{

    /**
    *@return This method will invoke the getString() method in class ABC
    */
    public String getString(){
        return ABC.getString();//supposing that getString() is static
    }
}

package different_package;

import myPackage.*;

public class Main{

    //You could also do: 'myPackage.XYZ <variable name>'
    XYZ xyzInstance= new XYZ();

    /*some code*/

    // Accesses the method you want
    xyzInstance.getString();
}