为什么SubClass不必实现doFoo()方法?
因为它已在SuperClass
中实施。
但是我不能为SuperClass中的doFoo()方法添加@Override。
不,您不能,因为SuperClass
不执行AnInterface
。它不会覆盖任何人的方法。
所以它被遮蔽了?
编号影子是别的。它关注变量。因此,如果SuperClass
的变量为foo
,并且您尝试定义一个具有相同名称的变量,那就是shadowing。这没有名字。
这是一个很好的/正常的做法?
这是正常的做法。我在许多大型项目中多次看到它。
TLDR举例如下:
比方说,我们有需要实施一个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
});
}
}
代码也可以不把)称为doFoo(空方法 – GarfieldKlon
那么这意味着它继承'doFoo()'自其超和符合标准履行接口@GarfieldKlon – Stephan