如何调用基类方法?

dcp*_*dcp 1 java inheritance abstract-class

假设我有这样的类声明:

public abstract class IdentifiableEntity  {
    public boolean validate() {
        return true;
    }
}

public class PreferenceCategory extends IdentifiableEntity {
    public boolean validate() {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我创建了PreferenceCategory变量,我想调用IdentifiableEntity.validate()方法,而不是 PreferenceCategory.validate()方法.

我原本以为我可以使用强制转换(见下文),但它仍然调用重写的方法:

PreferenceCategory cat = new PreferenceCategory();

// this calls PreferenceCategory.validate(), not what I want
((IdentifiableEntity)cat).validate(); 
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

Bal*_*usC 9

你不能.你最好的办法是添加另一种PreferenceCategory调用super validate()方法的方法.

public boolean validateSuper() {
    return super.validate();
}
Run Code Online (Sandbox Code Playgroud)

但是你为什么要这样做呢?这有点设计气味.您可能会发现责任链模式很有趣.