毎回、どの言語でも、「スーパー」関数と呼ぶ前にクラス関数とプロセス命令を上書きすると、何かがおかしいと感じます。
しかし、私は何を知りません!それはちょうど悪い感じです。
皆さんは、それは悪い習慣だと思いますか? 私のコードを読んでいる人を混乱させますか?
私の質問を明確にするために、例を挙げましょう。
ユーザーに電子メールを送信するだけのクラス「SendEmail」を考えてみましょう。
public class UserEmailSender {
public String sendTo;
public Boolean isDeveloper;
public void send(String emailBody){
System.out.println("let's send an email to"+sendTo);
}
}
ここで、すべての電子メールが社内で送信されるようにするために、このクラスを上書きしたいと考えています。
public class InCompanyEmailSender extends UserEmailSender{
@Override
public void send(String emailBody){
if(! sendTo.endsWith("@myCompany.com")){
sendTo = "me@myCompany.com";
}
super.send(emailBody);
}
}
クラス InCompanyEmailSender では、「スーパー」送信機能を呼び出す前に、電子メール アドレスをチェック/置換しています。
これは単なる例なので、もっと多くのことができるかもしれません...