📅  最后修改于: 2020-03-29 09:41:00             🧑  作者: Mango
方法的默认虚拟行为在C++和Java中相反:
在C++中,默认情况下,类成员方法是非虚拟的。可以使用virtual关键字将它们虚拟化。例如,在以下程序中,Base :: show()是非虚拟的,并且程序打印“ Base :: show()named”。
#include
using namespace std;
class Base {
public:
// 默认非虚拟
void show() {
cout<<"Base::show()被调用";
}
};
class Derived: public Base {
public:
void show() {
cout<<"Derived::show()被调用";
}
};
int main()
{
Derived d;
Base &b = d;
b.show();
getchar();
return 0;
}
在Base :: show()的定义之前添加虚拟,使程序打印“ Derived :: show()被调用”
在Java中,默认情况下方法是虚拟的,可以使用final关键字将其设置为非虚拟的。例如,在下面的Java程序中,show()默认为虚拟,程序打印“ Derived :: show()named”
class Base {
// 默认虚拟
public void show() {
System.out.println("Base::show()被调用");
}
}
class Derived extends Base {
public void show() {
System.out.println("Derived::show()被调用");
}
}
public class Main {
public static void main(String[] args) {
Base b = new Derived();;
b.show();
}
}
与C++非虚拟行为不同,如果我们在Base中的show()定义之前添加final,则上述程序将无法编译。