Mi stavo chiedendo perché questo pezzo di codice JAVA produca un output diverso rispetto allo stesso codice in C++.Differenza tra questi 2 codici?
#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;
}
Questo produce l'uscita:
A::Foo()
B::Foo()
il codice 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");
}
}
Questo codice produce solo
B
B
Perché questo output diverso in questo caso ?
In C++ non si dovrebbero chiamare funzioni virtuali nel costruttore (o distruttore), io non faccio molto Java, quindi non parlerò su questo. – Borgleader
Si noti che nel codice C++ si sta chiamando da entrambi i costruttori, mentre nel codice Java si sta chiamando solo dal costruttore di Testb. – Eran
Oops, scusa ho sbagliato, un secondo ... –