如何强制派生类调用超级方法?(就像安卓一样)

2022-08-31 11:40:28

我想知道,当创建新类然后重写方法时,在eclipse中,我总是自动添加:.这是如何发生的?抽象类或父类中是否有 java 关键字强制执行此操作?ActivityonCreate()super.onCreate()

我不知道不调用超类是否违法,但我记得在某些方法中,我因为不这样做而抛出了一个异常。这是否也内置于java中?你能用一些关键字来做到这一点吗?或者它是如何完成的?


答案 1

这是在支持注释库中添加的:

dependencies {
    compile 'com.android.support:support-annotations:22.2.0'
}

http://tools.android.com/tech-docs/support-annotations

@CallSuper


答案 2

如果要强制子类执行父类的逻辑,则常见模式如下所示:

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()


推荐