我有class Person, class Student
和Student extends Person
。据我了解,静态绑定如下:
class Person {
talk(Person p) {
print("Hi by person.");
}
}
class Student extends Person {
talk(Student s) {
print("Hi by stud.");
}
}
现在,如果我实例化并调用方法:
Person x = new Student();
talk(x);
// output: "Hi by person." because of static binding, am I right?
我的问题:如果只有class Student
一个方法怎么办talk(Student s)
。现在我打电话talk(x)
。既然我通常应该talk()
从 获取方法class Person
,那么当没有这种方法时会发生什么?
编辑:我试图运行它,它给了我一个编译错误。好的,但是为什么会发生这种情况?我了解到编译器将首先转到子类并搜索该方法,如果它在那里,那么它会被执行吗?