在 C++ 中,可以更改重写方法的可见性。我发现这个功能有时非常有用,例如:
考虑您希望一个类具有一些调试方法,但您不希望它们作为公共类接口可见。你可以有类似的东西:
class IDebuggable {
public:
virtual void debug(std::string s) = 0;
};
class MyProductionClass: public IDebuggable
public:
void myClassMethod() {}
private:
virtual void debug(std::string) {
// do some debug here
}
};
为此,当使用 MyProductionClass 类的对象时,我只能访问 MyProductionClass::myClassMethod()(生产接口)。
但是,如果我想使用它的调试功能,我可以这样做:
MyProductionClass* obj = new MyProductionClass();
IDebuggable* iface = obj;
iface->debug("Hello World");
根据我的经验,我发现这个“功能”非常有用。在 java 中这是不可能的,因为禁止更改继承方法的可见性。有没有另一种方法可以实现上述神器?
非常感谢