class A
{
public:
virtual void func()
{
AfxMessageBox("A::func()");
}
};
class B : public A
{
private:
void func()
{
AfxMessageBox("B::func()");
}
};
A* pa=new B();
pa->func();
結(jié)果是調(diào)用了B的func函數(shù),突破了private的限制。
說(shuō)的明白一點(diǎn),就是在Java中,要求子類在覆蓋父類的函數(shù)時(shí),不能降低可見性,只能擴(kuò)大或至少相等。而對(duì)于C++卻沒(méi)有這樣的限制,正如上面的例子掩飾的那樣。
此外,在Java中,如果父類中把函數(shù)聲明為private的,那么對(duì)于子類而言,該函數(shù)根本就不可見,根本就產(chǎn)生不了override,即便在子類中定義一個(gè)函數(shù)名、參數(shù)類型、返回值、修飾符也為private的函數(shù)也不會(huì)與父類產(chǎn)生任何關(guān)系。