如何在其他程序包中访问非公共类的非公共字段?
我在非公共类下面,我想从其他包中的类调用getString。我该怎么办?
class ABC{
String getString(){
return "ABC"
}
}
答案 0 :(得分:0)
这就是我们在Java中称为access-level
的情况。
该文档实际上很棒,您可以here找到它。 请参阅下表(从文档中复制)。
public
,private
,<no modiefier>
和protected
。class
,subclass
等)。 +--------------------------------------------------+
| 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();
}