为什么 SubClass 不必实现 doFoo() 方法?
因为它已经在SuperClass
.
但是我不能在 SuperClass 中为 doFoo() 方法添加 @Override。
不,你不能,因为SuperClass
没有实现AnInterface
. 它不会覆盖任何人的方法。
所以有阴影吗?
不。阴影是另一回事。它关注变量。因此,如果SuperClass
有一个变量foo
,并且在SubClass
您尝试定义一个具有相同名称的变量,那将是shadowing。这没有名字。
这是一个好的/正常的做法吗?
这是正常的做法。我在许多大型项目中多次看到它。
TLDR 示例如下:
假设我们有一个实现 a 所需的接口ModelBasedWizard
(向导在许多桌面应用程序中很常见)。
public interface IModelBasedWizard {
public void addWizardPage(IWizardPage page);
public IStatus getWizardStatus();
public void bindModel(IModel model);
}
假设已经有一个向导的实现
public class Wizard {
public void addWizardPage(IWizardPage page) {
pages.add(page);
page.createContent(this);
}
public IStatus getWizardStatus() {
List<IStatus> stati= new ArrayList<Status>();
for (IWizardPage page : pages) {
stati.add(page.getStatus());
}
return stati;
}
}
现在,这只是向导的视觉部分,但它对模型一无所知。好的没问题:
public class ModelBasedWizard extends Wizard implements IModelBasedWizard {
//UI, pages, stati and all other functionalities are already implemented.
//I just need to bind this wizard to a model
//create some content here
@Override
public void bindModel(IModel model) {
this.model = model;
this.fieldOne.bindToModel(model);
model.addPropertyChangeListener(new PropertyChangeListener() {
//bla bla
});
}
}