【发布时间】:2015-03-07 05:45:39
【问题描述】:
public class Test {
public static void main(String args[]){
Student s = new Student();
s.printPerson();
}
}
class Person{
private String getInfo(){
return "Person";
}
public void printPerson(){
System.out.println(getInfo());
}
}
class Student extends Person{
private String getInfo(){
return "Student";
}
}
输出为Person。我对这个结果感到困惑。在 main 方法中,引用类型为Student。所以在执行s.printPerson()时,应该执行Student的方法。关键是,在继承自超类的公共方法中,调用了哪个私有方法?为什么?
我认为在s.printPerson() 中,它调用了getInfo() 的Student。但事实证明不是。 IDE 告诉我
private String getInfo(){
return "Student";
}
从未使用过。
谁能帮我解决这个问题?
【问题讨论】:
-
如果我从
Person类中调用getInfo(),我知道它会输出“Person”。但在我的代码中,我从类Student中调用getInfo(),而不是Person。我从Student调用getInfo(),它似乎调用了Person的printPerson()方法,而不是Student。我对这个问题感到困惑。 -
我稍微修改一下代码。我用
Person中完全相同的代码覆盖Student中的getInfo()。现在输出是“学生”。我想知道继承方法的机制。我认为输出应该是一样的,因为无论我是否覆盖getInfo(),方法的内容都是一样的,所以输出应该是一样的。有没有人可以帮我解决这个问题?非常感谢。
标签: java inheritance polymorphism private