如何强制派生类调用超级方法?(就像安卓一样)
2022-08-31 11:40:28
我想知道,当创建新类然后重写方法时,在eclipse中,我总是自动添加:.这是如何发生的?抽象类或父类中是否有 java 关键字强制执行此操作?Activity
onCreate()
super.onCreate()
我不知道不调用超类是否违法,但我记得在某些方法中,我因为不这样做而抛出了一个异常。这是否也内置于java中?你能用一些关键字来做到这一点吗?或者它是如何完成的?
我想知道,当创建新类然后重写方法时,在eclipse中,我总是自动添加:.这是如何发生的?抽象类或父类中是否有 java 关键字强制执行此操作?Activity
onCreate()
super.onCreate()
我不知道不调用超类是否违法,但我记得在某些方法中,我因为不这样做而抛出了一个异常。这是否也内置于java中?你能用一些关键字来做到这一点吗?或者它是如何完成的?
这是在支持注释库中添加的:
dependencies {
compile 'com.android.support:support-annotations:22.2.0'
}
http://tools.android.com/tech-docs/support-annotations
@CallSuper
如果要强制子类执行父类的逻辑,则常见模式如下所示:
public abstract class SuperClass implements SomeInterface
{
// This is the implementation of the interface method
// Note it's final so it can't be overridden
public final Object onCreate()
{
// Hence any logic right here always gets run
// INSERT LOGIC
return doOnCreate();
// If you wanted you could instead create a reference to the
// object returned from the subclass, and then do some
// post-processing logic here
}
protected abstract Object doOnCreate();
}
public class Concrete extends SuperClass
{
@Override
protected Object doOnCreate()
{
// Here's where the concrete class gets to actually do
// its onCreate() logic, but it can't stop the parent
// class' bit from running first
return "Hi";
}
}
这实际上并没有回答你的问题,即是什么促使Eclipse自动将超类调用插入到实现中;但是,我不认为这是无论如何都要走的路,因为这总是可以删除的。
您实际上不能强制要求方法必须使用Java关键字或类似名称调用超类的版本。我怀疑你的异常只是来自父类中检查预期不变量的一些代码,或者其他代码,这些代码被你的方法无效了。请注意,这与由于未能调用 而引发异常有细微的不同。super.onCreate()