我试图用子类中的虚拟方法覆盖抽象类中的抽象方法。我(假设到目前为止?)了解抽象方法和虚拟方法之间的区别。
显然我无法做到这一点,但我的问题是......为什么?根据已接受的答案here以及以下场景,我只是没有看到问题:
public abstract class TopLevelParent
{
protected abstract void TheAbstractMethod();
}
public class FirstLevelChild1 : TopLevelParent
{
protected override void TheAbstractMethod()
{
}
}
public class FirstLevelChild2 : TopLevelParent
{
protected virtual override void TheAbstractMethod()
{
//Do some stuff here
}
}
public class SecondLevelChild : FirstLevelChild2
{
//Don't need to re-implement the method here... my parent does it the way I need.
}
很明显,我所做的是拥有一个顶级父级和两个继承子级,以及另一个继承其中一个子级的类。再次,根据我上面发布的链接中接受的答案:
“虚拟函数,基本上就是说看,这是功能
这对于儿童班级来说可能足够好,也可能不够好。所以如果是的话
足够好了,使用这个方法,如果没有,那么重写我,并提供
你自己的功能。”
并且第二级子级将从其父级继承虚拟方法,从而满足其最顶层父级抽象方法的实现要求......有什么问题?
我在某个地方遗漏了一些细节,这阻碍了我对此的理解......
An override method is隐式虚拟(从某种意义上说它可以在子类中重写),除非标记为sealed.
Observe:
public class FirstLevelChild1 : TopLevelParent
{
protected override void TheAbstractMethod() { }
}
public class SecondLevelChild1 : FirstLevelChild1
{
protected override void TheAbstractMethod() { } // No problem
}
public class FirstLevelChild2 : TopLevelParent
{
protected sealed override void TheAbstractMethod() { }
}
public class SecondLevelChild : FirstLevelChild2
{
protected override void TheAbstractMethod() { }
// Error: cannot override inherited member
// 'FirstLevelChild2.TheAbstractMethod()' because it is sealed
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)