【问题标题】:Can abstract class be override in derived class without implementing in base class可以在派生类中覆盖抽象类而不在基类中实现吗
【发布时间】:2012-07-09 18:01:07
【问题描述】:

我有一个抽象类A,只有一个抽象方法。

这个类被另一个类B继承,它不应该实现抽象方法。

现在另一个类C需要继承类B并实现类A中定义的方法。

我该怎么做?

【问题讨论】:

    标签: c# oop inheritance


    【解决方案1】:

    如果类B 不打算实现其基类的所有抽象成员,您还需要将其标记为抽象类。然后,在 C 类中照常覆盖。

    例子:

    public abstract class A
    {
        public abstract void DoStuff();
    }
    
    public abstract class B : A
    {
        // Empty
    }
    
    public class C : B
    {
        public override void DoStuff()
        {
            Console.WriteLine("hi");
        }
    }
    

    【讨论】:

    • 但是 ClassA 的属性或方法不能直接在 ClassC 中覆盖。
    • 但是 ClassA 属性或方法不能在 ClassC 中重写,除非在 classB 中实现该方法。有任何示例吗?
    • 我添加了一个例子。 FishBaskedGordo,如果您不喜欢,请随时删除。
    • @user490112:我认为你把这个复杂化了。如果 A 声明了 virtualabstract 方法,则层次结构中较低的任何类(BC 或派生自 A 的任何其他类)都可以覆盖它。
    • @user490112 您可以像往常一样在C 类中覆盖A 类的抽象和虚方法。如果要覆盖非抽象/非虚拟方法,可以使用 new 关键字来实现。问题是 B 类。您要么必须将其标记为抽象,要么实现A 的抽象成员。如果你不这样做,B 类将违反接口契约; B 类的实例不会与 A 类表现出“is-a”关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2019-08-31
    • 2012-02-25
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多