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 では、継承されたメソッドの可視性を変更することは禁止されているため、これは不可能です。上記のアーティファクトを達成する別の方法はありますか?
どうもありがとう