gpt4 book ai didi

c# - 如果覆盖它,是否要求子类调用 super.doSomething()?

转载 作者:太空宇宙 更新时间:2023-11-03 19:25:35 24 4
gpt4 key购买 nike

我有一个名为 Vehicle 的抽象类:

public abstract class Vehicle {

public void run() {
addToRunningVehicleList();
}

}

我希望每个 extends Vehicle 类都必须调用 super.run() 如果它们override run方法。例如:

public class Car {

@Override
public void run() { // Error here because does not call super.run()
carRunningAnimation();
}

}

在 OOP 概念或 Java/C# 中是否可能?

编辑:跟随 Petar Ivanov,我有这段代码:

public abstract class Vehicle {

public final void run() {
Log.e("Run", "Add To List");
runImp();
}

public void runImp() {}

}

public class Car extends Vehicle {

@Override
public void runImp() {
Log.e("Run", "Run in Car");
}

}

但是,它对公共(public) API 不是很好。扩展 Vehicle 时,最终用户必须覆盖 runImp,但随后他们必须调用 run() 方法,所以我必须同时公开 runrunImp,没有什么比这更好的了。

最佳答案

这是我的做法 (C#):

public abstract class Vehicle {

public void Run() {
//code that will always run
addToRunningVehicleList();

//code that can be overriden
RunImpl();
}

protected virtual void RunImpl() { }
}

public class Car : Vehicle {

protected override void RunImpl() {
carRunningAnimation();
}

}

您可以使 RunImpl 受到保护,以确保它不能在 Vehicle 的子类之外调用。

关于c# - 如果覆盖它,是否要求子类调用 super.doSomething()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8982471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com