爲什麼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