我想知道为什么这段JAVA代码产生的输出不同于C++中的相同代码。这两个代码之间的区别?
#include "stdafx.h"
#include <iostream>
using namespace std;
class A
{
public:
A(){
this->Foo();
}
virtual void Foo()
{
cout << "A::Foo()" << endl;
}
};
class B : public A
{
public:
B()
{
this->Foo();
}
virtual void Foo()
{
cout << "B::Foo()" << endl;
}
};
int main(int, char**)
{
B objB;
system("pause");
return 0;
}
这将产生输出:
A::Foo()
B::Foo()
Java代码是:
public class Testa {
public Testa()
{
this.Foo();
}
public static void main(String[] args)
{
Testb b = new Testb();
}
void Foo()
{
System.out.println("A");
}
}
class Testb extends Testa {
public Testb()
{
this.Foo();
}
@Override
void Foo()
{
System.out.println("B");
}
}
此代码仅产生
B
B
这是为什么输出在这种情况下不同?
在C++中,你不应该在构造函数(或析构函数)中调用虚函数,我不会做太多的Java,所以我不会说这些。 – Borgleader 2014-10-16 19:26:02
请注意,在C++代码中,您从两个构造函数中调用foo,而在Java代码中,您只能从Testb的构造函数调用它。 – Eran 2014-10-16 19:29:35
哎呀,对不起,我输错了,一秒钟...... – 2014-10-16 19:30:56