【发布时间】:2012-01-24 05:37:06
【问题描述】:
我有一个名为 Vehicle 的抽象类:
public abstract class Vehicle {
public void run() {
addToRunningVehicleList();
}
}
如果override run 方法,我希望extends Vehicle 的每个类都必须调用super.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");
}
}
但是,这对于公共 API 来说并不是很好。扩展Vehicle时,最终用户必须覆盖runImp,但随后他们必须调用run()方法,所以我必须将run和runImp都公开,这没有更好的办法。
【问题讨论】:
-
记住你是为谁设计的。如果它是一段内部代码,注释就足够了。如果它是一个公共 API,并且您希望人们继承,那么您需要编写一段文档告诉他们这样做。在 C# 中,您可以使用虚拟和非虚拟方法做一些鬼鬼祟祟的事情,但在 Java 中,如果不使用抽象基类就很难做到这一点。
-
@Spence 你真的了解我的情况。我正在编写公共 API,所以也许 cmets 或文档还不够。不幸的是,我找不到
virtual的 Java 等效项:(您应该发布您的评论作为答案,并附上一些代码,我会选择您的答案 :)
标签: c# java oop inheritance polymorphism