在 C++ 中,您可以执行以下操作:
class base_class
{
public:
virtual void do_something() = 0;
};
class derived_class : public base_class
{
private:
virtual void do_something()
{
std::cout << "do_something() called";
}
};
derived_class
覆盖该方法并do_something()
使其成为private
. 效果是,调用此方法的唯一方法是这样的:
base_class *object = new derived_class();
object->do_something();
如果将对象声明为 type derived_class
,则不能调用该方法,因为它是私有的:
derived_class *object = new derived_class();
object->do_something();
// --> error C2248: '::derived_class::do_something' : cannot access private member declared in class '::derived_class'
我认为这很好,因为如果您创建一个用作接口的抽象类,您可以确保没有人不小心将字段声明为具体类型,但始终使用接口类。
由于通常在 C#/.NET 中,不允许在覆盖方法时缩小访问范围public
,private
有没有办法在这里实现类似的效果?