假设我具有以下类结构。如果我执行子类,它将同时打印两个。
内部公共方法
内部私有方法
谁能解释为什么m1可以访问私有方法代码的原因?
class Base
{
public void m1()
{
System.out.println("Inside Public method");
m2();
}
private void m2()
{
System.out.println("Inside Private method");
}
}
public class Child extends Base
{
public static void main(String[] args)
{
Child ob = new Child();
ob.m1();
}
}
答案 0 :(得分:0)
该类中的所有内容均可访问私有变量/方法。
该包和任何子类中的所有内容都可以访问受保护的变量/方法。
所有对象都可以访问公共变量/方法。
答案 1 :(得分:0)
私有方法仅在类范围内可见。即使继承了m1
方法,方法m2
与私有方法m1
属于同一类。
答案 2 :(得分:0)
您可以通过反射来完成此操作,在这里可以看到:
Method method = c.getDeclaredMethod("m2", null);
method.setAccessible(true);
method.invoke(obj, null);
答案 3 :(得分:0)
私有方法可以由包含在其内部的类中的 any 方法调用。
您不能在Base类范围之外直接调用m2方法,但是可以通过较少受限制的方法(例如public或protected)间接调用它。 就像您使用m1方法一样。
调用者类无法直接调用m1,但是一定会执行它。这称为封装。您可以使用它隐藏对调用者无关紧要的实现细节。