#include <iostream>
using namespace std;

class X
{
    virtual void internalCall() { cout << "Class X" << endl; }
public:
    void externalCall() { internalCall(); }
};

class Y : public X
{
protected:
    virtual void internalCall2() { cout << "Class Y2" << endl; }
    virtual void internalCall() 
    {
        cout << "Class Y" << endl;
        internalCall2();
    }
};

int main()
{
    Y y;
    y.externalCall();
}