私有方法和子类

时间:2020-03-11 14:59:35

标签: java

假设我具有以下类结构。如果我执行子类,它将同时打印两个。

内部公共方法

内部私有方法

谁能解释为什么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();
    }
}

4 个答案:

答案 0 :(得分:0)

该类中的所有内容均可访问私有变量/方法。

该包和任何子类中的所有内容都可以访问受保护的变量/方法。

所有对象都可以访问公共变量/方法。

答案 1 :(得分:0)

私有方法仅在类范围内可见。即使继承了m1方法,方法m2与私有方法m1属于同一类。

答案 2 :(得分:0)

您可以通过反射来完成此操作,在这里可以看到:

Method method = c.getDeclaredMethod("m2", null);
      method.setAccessible(true);
      method.invoke(obj, null);

Any way to Invoke a private method?

答案 3 :(得分:0)

私有方法可以由包含在其内部的类中的 any 方法调用。

您不能在Base类范围之外直接调用m2方法,但是可以通过较少受限制的方法(例如public或protected)间接调用它。 就像您使用m1方法一样。

调用者类无法直接调用m1,但是一定会执行它。这称为封装。您可以使用它隐藏对调用者无关紧要的实现细节。

相关问题