SubClass が doFoo() メソッドを実装する必要がないのはなぜですか?
ですでに実装されているためSuperClass
です。
しかし、SuperClass の doFoo() メソッドに @Override を追加できません。
SuperClass
いいえ、実装していないため、できませんAnInterface
。誰もメソッドをオーバーライドしません。
だから陰になってる?
いいえ、シャドーイングは別のものです。それは変数に関するものです。したがって、変数があり、同じ名前の変数を定義しようとすると、シャドウイングSuperClass
になります。これには名前がありません。foo
SubClass
そして、これは良い/通常の習慣ですか?
これは通常の練習です。多くの大きなプロジェクトで何度も見てきました。
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
});
}
}