这是我现在正在测试的一段代码,我注意到当我在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)
publicprotectedJava中的(或)方法总是虚拟的.
这意味着如果派生类重写该方法,则通过基类进行的调用将调用派生类(如果该对象实际上是派生类的实例).
当您的基本方法public发生时,会发生这种情况,并通过调用它来printPerson()调用重写的派生版本.
当它是private,它不是虚拟的,因此来自基类的调用总是调用基本版本(因为它不知道派生类的方法).
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |