inro
在学Java的抽象函数时,我不禁想起了虚函数这个概念,想知道Java有没有虚函数,话不多说,开学!
虚函数的定义
在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,并且通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。
很明显,虚函数的特性与指针有关,让我们先看一小段C++代码
#include
using namespace std;
class A
{
public:
void virtual Fun()
{
cout <<"A is called"<< endl;
}
};
class B : public A
{
public:
void Fun()
{
cout << "B is called" << endl;
}
}
int main()
{
A a;
B b;
A *p;
p = &a;
p->Fun();
p = &b;
p->Fun();
return 0;
}
结果
A is called
B is called
可见,明明是指向父类的p,能够完美地指向子类,然后调用其重写虚函数,但我们删除virtual关键字,结果是
A is called
A is called
Java有没有虚函数
首先,Java没有指针,但Java所有的类变量都是具有指针特性的。我们先给出结论:Java的普通函数就是虚函数。
证明是从java字节码的命令行命名可看出
invokevirtual,也就是调用虚函数,所以java的普通函数就是虚函数。
拓展
C++ | Java |
---|---|
虚函数 | 普通函数 |
纯虚函数 | 抽象函数 |
抽象类 | 抽象类 |
虚基类 | 接口 |
Reference
[1] https://blog.csdn.net/wuqiuping695/article/details/49069779