强制基本方法调用
2022-09-01 08:47:22
Java 或 C# 中是否有强制继承类调用基本实现的构造?你可以调用 super() 或 base(),但是如果不调用它,是否有可能让它引发编译时错误?这将是非常方便的。
--编辑--
我主要对重写方法感到好奇。
Java 或 C# 中是否有强制继承类调用基本实现的构造?你可以调用 super() 或 base(),但是如果不调用它,是否有可能让它引发编译时错误?这将是非常方便的。
--编辑--
我主要对重写方法感到好奇。
没有也不应该做任何事情来做到这一点。
我能想到的最接近的事情是,如果在基类中有这样的东西:
public virtual void BeforeFoo(){}
public void Foo()
{
this.BeforeFoo();
//do some stuff
this.AfterFoo();
}
public virtual void AfterFoo(){}
并允许继承类覆盖 BeforeFoo 和/或 AfterFoo
不是在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
}
}
它很丑陋,但它实现了你想要的。否则,您只需要小心确保调用超类方法即可。
也许你可以修改你的设计来解决问题,而不是使用技术解决方案。这可能是不可能的,但可能值得考虑。
编辑:也许我误解了这个问题。您只在谈论构造函数还是一般方法?我假设了一般的方法。