调用方法时的private关键字

xhe*_*nry 1 java

这是我现在正在测试的一段代码,我注意到当我在Person中的getInfo()方法上将public更改为private时,都是Student().printPerson()和Person().printPerson ()打印出"人物".但是,当它公开时,会显示"学生".有人可以解释一下吗?为什么private修饰符不允许从Student访问getInfo方法?

        new Student().printPerson();
        new Person().printPerson();
      }
    }

    class Student extends Person {
        public Student(){
        System.out.println("student invoked")   ;
        }

      public String getInfo() {
        return "Student";
      }
    }

    class Person {
     public Person(){

    System.out.println("person invoked");

     }
        private String getInfo() {
        return "Person";
      }

      public void printPerson() {
        System.out.println(getInfo());
      }
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

publicprotectedJava中的(或)方法总是虚拟的.

这意味着如果派生类重写该方法,则通过基类进行的调用将调用派生类(如果该对象实际上是派生类的实例).

当您的基本方法public发生时,会发生这种情况,并通过调用它来printPerson()调用重写的派生版本.

当它是private,它不是虚拟的,因此来自基类的调用总是调用基本版本(因为它不知道派生类的方法).