为什么抽象方法必须在派生类中受到保护



从抽象类继承时,为什么抽象基类中受保护的抽象方法在抽象派生类中被重写时不能是私有的?

换言之,抽象方法是否可能由子抽象类定义,但不可由孙类访问?

考虑一个简化的例子:

public abstract class A
{
// This method is protected - makes sense
protected abstract void M();
}
public abstract class B : A
{
// Why can't this be private?
// Compiler forces it to be protected
// but this means grandchildren classes always have access to this method
protected override void M()
{
// Do something
}
}
public class C : B
{
// Is it possible for M() to be inaccessible here?
}

孙类C也实现了父类A,所以这是不可能的。毕竟,在程序中,您可以将任何C对象强制转换为a类型的变量,并且您希望能够对其调用M((方法。对于子类来说,不管继承层次结构级别如何,都不实现其父类的所有成员是没有意义的。

由于继承的工作原理,我认为这是不可能的。所有的孩子(派生类(都有父母所拥有的一切,再加上你需要的任何额外的东西。

也就是说,如果你想让一个子类没有其父类的方法,你可以用接口来实现。只需定义一个缺少您想要限制的方法的接口,并让父级和子级都实现它

最新更新