Java:Overrideとは?/親を呼ぶにはsuperを使う
知らない概念を理解するには、実際にそれを使ってみるのが早道なのですが
必要性を感じない機能の場合は使用例もなかなか思いつきません。
毎度、管理人イガジーです。
という訳でOverrideのお話です。
Override とは、既にあるメソッド(関数)を自分用に置き換える ことです。
イメージ的には、既存のものに自分のものをかぶせる感じのものです。
例えば、TextField には、getText()という既存のメソッドがあります。
これを使う際に、毎回trim()をかける必要があるとしましょう。
※ trim() とは、左右(前後というべきか?)の空白や改行コードを削除するメソッドです。
getText()の部分を、毎回getText().trim() と書くのもひとつの手ですが
class MyTextField extends TextField {
private static final long serialVersionUID = 1L;
public String getText2(){
return getText().trim();
}
}
という、trim()付きのメソッドgetText2()を持つTextFieldクラスを
作るという手もあります。
上記の場合は、getText()は従来通りで、getText2()がtrim()付きになります。
何らかの都合で、trim()無しのgetText()は不要で、もう全てをtrim()付き
にしたくなったとしましょう。
その場合は、getText2()を、getText()というメソッド名にしてかぶせてしまう、
すなわち、Overrideしてしまうことが可能です。
ただし、ひとつ問題があります。単純に、
public String getText(){
return getText().trim();
}
としてしまうと、自分で自分を呼ぶ無限ループに入ってしまいます。
Overrideの中では、自分ではなくて「親(かぶせる元)のメソッド」を
呼びたいのですが、どうすればよいでしょうか?
答は、
class MyTextField extends TextField {
private static final long serialVersionUID = 1L;
@Override
public String getText(){
return super.getText().trim();
}
}
と、superを指定します。
特に指定しない場合は、this(自分自身)になりますが
superを指定すると「親」を指定したことになるのですね。
これは覚えておいて損はないでしょう。
この記事へのコメントはこちら