我是java新手...如果我遗失了什么,请告诉我。
我尝试访问下面的私有方法:
public class PublicClassPrivateMethodAndVariableAccess
{
private int a=23;
private void show()
{
System.out.println("a = "+a);
}
public static void main(String... arg)
{
PublicClassPrivateMethodAndVariableAccess pr = new PublicClassPrivateMethodAndVariableAccess();
System.out.println("using method showing pr.show() ");
pr.show();
System.out.println("pr.a = "+pr.a);
}
}
这将输出显示为:
using method showing pr.show()
a = 23
pr.a = 23
但是当我使用类似的代码以不同的方式访问私有方法时......:
class Testclass
{
private int a=23;
private void show()
{
System.out.println("a = "+a);
}
}
public class NoModifierClassPrivateMethodAndVariableAccess
{
public static void main(String... arg)
{
Testclass pr = new Testclass();
System.out.println("using method showing pr.show() ");
pr.show();
System.out.println("pr.a = "+pr.a);
}
}
...它显示如下错误:
NoModifierClassPrivateMethodAndVariableAccess.java:19: error: show() has private
access in Testclass
pr.show();
^
NoModifierClassPrivateMethodAndVariableAccess.java:20: error: a has private access in Testclass
System.out.println("pr.a = "+pr.a);
^
2 errors
我在问为什么第二个代码无法访问私有方法?
答案 0 :(得分:0)
您需要为私人物品制作一个吸气剂。
您无法直接访问私人物品,而这正是您在输入
时尝试执行的操作 public int getA(){
return a;
}
相反,你应该使用吸气剂,如
System.out.println("pr.a = "+pr.getA());
所以你的新显示应该是
List<Class_A>
答案 1 :(得分:0)
私有字段a
可以仅由其拥有的类A_Class
本身访问。例如:
public class A_Class {
private int a = 3;
private void show() {
System.out.println(a); // output is 3
}
}
我们在这里:
A_Class
a
这就是你在第一段代码中所做的事情,并且工作正常。
但是,在您的第二个代码中,您正在课堂B_Class
中尝试访问类a
所拥有的私有字段A_Class
,但这是不可能的。例如:
public class A_Class {
private a = 3;
}
public class B_Class {
void show() {
private A_Class aclass = new A_Class();
System.out.println(aclass.a); // error! a has private access
}
}
我们在这里:
B_Class
A_Class
a
具有私人访问权限的字段A_Class
- 此操作失败! 答案 2 :(得分:0)
来自Oracle docs:
+-------------+-------+---------+----------+-------+
| 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 |
+-------------+-------+---------+----------+-------+
在第一种情况下,您可以根据文档从同一个类调用show
方法。
在第二种情况下,从不同的类调用私有方法会导致编译器错误。
如果你真的想从不同的类访问私有方法,那么你想在Java中查看Reflections。
示例:
import java.lang.reflect.Method;
class Testclass
{
private int a=23;
private void show()
{
System.out.println("a = "+a);
}
}
public class NoModifierClassPrivateMethodAndVariableAccess
{
public static void main(String... arg) throws Exception
{
Class<?> clazz = Testclass.class;
Method method = clazz.getDeclaredMethod("show");
method.setAccessible(true);
System.out.println(method.invoke(Testclass.class.newInstance()));
}
}