调用方法时的private关键字

时间:2013-09-12 00:28:53

标签: java

这是我现在正在测试的一段代码,我注意到当我在Person中的getInfo()方法上将public更改为private时,Student()。printPerson()& Person()。printPerson()打印出“Person”。但是,当它公开时,会显示“学生”。有人可以解释一下吗?为什么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());
      }

1 个答案:

答案 0 :(得分:5)

Java中的

public(或protected)方法始终是虚拟

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

当您的基本方法为public时,会发生这种情况,并且从printPerson()调用它会调用重写的派生版本。

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