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を指定すると「親」を指定したことになるのですね。

これは覚えておいて損はないでしょう。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。