在这个 C++ 程序中,
#include<iostream>
using namespace std;
class Base
{
public:
Base()
{
cout<<"\n\nBase ctr";
fun();
}
virtual void fun()
{
cout<<"\n\nBase's fun()";
}
};
class Derived : public Base
{
public:
Derived()
{
cout<<"\n\nDerived ctr";
fun();
}
virtual void fun()
{
cout<<"\n\nDerived's fun()";
}
};
int main()
{
Derived obj;
return 0;
}
当使用 Derived 类对象从 Base 类的构造函数调用虚函数时,会调用 Base 的类 fun(),
输出::
基础 ctr
基地的乐趣()
派生的 ctr
派生的乐趣()
原因在这里解释 但是
在这个java程序中,
class Base
{
Base()
{
System.out.println( "\n\nBase ctr" );
fun();
}
void fun()
{
System.out.println( "\n\nBase's fun()" );
}
}
class Derived extends Base
{
int a=1;
Derived()
{
System.out.println( "\n\nDerived ctr a = "+a );
a=8;
fun();
}
void fun()
{
System.out.println( "\n\nDerived's fun() a = "+a );
}
public static void main(String args[])
{
Derived obj = new Derived();
}
}
输出是 ::
Base ctr
派生的 fun() a = 0
导出 ctr a = 1
派生的 fun() a = 8
这里调用了派生类fun(),所以应用于c++程序的约束,不适用于JAVA程序。为什么?