用虚拟覆盖抽象方法
我试图用子类中的虚拟方法覆盖抽象类中的抽象方法。 我(假设直到现在?)理解抽象方法和虚拟方法之间的区别。
显然我无法做到,但我的问题是......为什么? 基于这里接受的答案和下面的场景,我只是没有看到问题:
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.
}
所以显然我所做的是拥有一个拥有两个继承子代的顶层父代,以及另一个继承其中的类。 再次,根据我在上面发布的链接中接受的答案:
“一个虚拟函数,基本上是说外观,这里的功能可能会或可能不足以满足子类的要求,所以如果它足够好,使用这个方法,如果没有,然后覆盖我,并提供你自己的功能。 “
并且第二级别的孩子会从其父母继承虚拟方法,从而满足其最高父母的抽象方法的实施要求......问题是什么?
我错过了一些阻碍我理解这一点的细节...
override
方法是隐式虚拟的(意思是它可以在子类中重写),除非标记为sealed
。
注意:
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
}
abstract
方法在继承链中已经是virtual
的 - 不需要在子类中声明它是virtual
,以允许子类覆盖它 - 子类已经可以覆盖它。
如果你没有提供实现,将使用最接近的实现(查看继承列表)。
链接地址: http://www.djcxy.com/p/38121.html