子類的函數A中調用父類的函數B,函數B中調用函數C,子類中存在函數C的覆寫函數D,此時父類的方法會去調用子類的實現D。
C++
#include <iostream>
using namespace std;
class Pop
{
public :
virtual void set()
{
res();
}
virtual void res()
{
cout << "this is A" << endl;
}
};
class Per : public Pop
{
public :
void set()
{
Pop::set();//非靜態函數調用,爲調用父類的同名方法,爲了表明作用域用此方法調用
}
void res()
{
cout << "this is B" << endl;
}
};
int main() {
Per per;
per.set();//thia is B
return 0;
}
JAVA
public class Demo {
public static void main(String[] args) {
Per per= new Per();
per.set();// this is B
}
}
class Pop {
public void set() {
res();
}
public void res() {
System.out.println("this is A");
}
}
class Per extends Pop{
@Override
public void set() {
super.set();
}
@Override
public void res() {
System.err.println("this is B");
}
}