问题描述
说我有这样声明的类:
public abstract class IdentifiableEntity {
public boolean validate() {
return true;
}
}
public class PreferenceCategory extends IdentifiableEntity {
public boolean validate() {
return true;
}
}
现在,假设我创建了PreferenceCategory变量,并且我想调用IdentifiableEntity.validate()方法,而不是不是 PreferenceCategory.validate()方法.
Now, let's say I have PreferenceCategory variable created, and I want to call the IdentifiableEntity.validate() method, not the PreferenceCategory.validate() method.
我本以为可以通过强制转换(见下文)来做到这一点,但是它仍然调用了重写的方法:
I would have thought I could do this with a cast (see below), but it still calls the overridden method:
PreferenceCategory cat = new PreferenceCategory();
// this calls PreferenceCategory.validate(), not what I want
((IdentifiableEntity)cat).validate();
有什么办法吗?
推荐答案
您不能.最好的选择是在PreferenceCategory
中添加另一个方法,该方法将调用super的validate()
方法.
You can't. Your best bet is to add another method to PreferenceCategory
which calls super's validate()
method.
public boolean validateSuper() {
return super.validate();
}
但是您为什么要这样做?这有点设计味.您可能会发现责任模式链很有趣.
But why would you like to do that? This is a bit a design smell. You may find the chain of responsibilty pattern interesting.
这篇关于如何调用基类方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!