强制基本方法调用

2022-09-01 08:47:22

Java 或 C# 中是否有强制继承类调用基本实现的构造?你可以调用 super() 或 base(),但是如果不调用它,是否有可能让它引发编译时错误?这将是非常方便的。

--编辑--

我主要对重写方法感到好奇。


答案 1

没有也不应该做任何事情来做到这一点。

我能想到的最接近的事情是,如果在基类中有这样的东西:

public virtual void BeforeFoo(){}

public void Foo()
{

this.BeforeFoo();
//do some stuff
this.AfterFoo();

}

public virtual void AfterFoo(){}

并允许继承类覆盖 BeforeFoo 和/或 AfterFoo


答案 2

不是在Java中。这在C#中可能是可能的,但其他人将不得不对此说话。

如果我理解正确,你想要这个:

class A {
    public void foo() {
        // Do superclass stuff
    }
}

class B extends A {
    public void foo() {
        super.foo();
        // Do subclass stuff
    }
}

在Java中,你可以做些什么来强制使用超类foo,如下所示:

class A {
    public final void foo() {
        // Do stuff
        ...
        // Then delegate to subclass
        fooImpl();
    }

    protected abstract void fooImpl();
}

class B extends A {
    protected void fooImpl() {
        // Do subclass stuff
    }
}

它很丑陋,但它实现了你想要的。否则,您只需要小心确保调用超类方法即可。

也许你可以修改你的设计来解决问题,而不是使用技术解决方案。这可能是不可能的,但可能值得考虑。

编辑:也许我误解了这个问题。您只在谈论构造函数还是一般方法?我假设了一般的方法。


推荐