Java オーバーライドのサンプル

Javaのオーバーライドのサンプルです。

目次

オーバーライド

  • クラスを継承するときに使用します。
    Java クラスの継承のサンプル
  • 基底クラスで定義したメソッドを、派生クラスで同じメソッド名(引数、戻り値の型も一致)を記述して処理内容を上書きすることです。
  • 似た名前として、オーバーロードがありますがそれとは別です。オーバーロードと継承は関係ありません。
    Java オーバーロードのサンプル

コード

3-7行目は基底クラスです。
8-13行目は派生クラスです。
4行目と10行目に同じメソッド名「getName1」があります。
18行目は基底クラスと派生クラスの両方にある「getName1」メソッドを実行しています。実行結果は派生クラスのメソッドが実行されます。→オーバーライドです。
9行目はアノテーションです。このアノテーションがある場合、オーバーライドになっていないとエラーになります。

package test1;

class Color1 {
	String getName1() {
		return "赤";
	}
}
class Color2 extends Color1{
	@Override
	String getName1() {
		return "青";
	}
}
public class Test1 {
	public static void main(String[] args) {
				
		Color2 c2 = new Color2();		
		System.out.println(c2.getName1()); //青
	}
}

super

superを使用すると、オーバーライドした派生クラスのメソッドから基底クラス(スーパークラス)のメソッドを呼ぶことができます。

11行目は、superを使用して基底クラスのメソッドを呼んでいます。
19行目は、基底クラスと派生クラスのメソッドの実行結果が表示されます。

package test1;

class Color1 {
	String getName1() {
		return "赤";
	}
}
class Color2 extends Color1{
	@Override
	String getName1() {
		System.out.println(super.getName1());
		return "青";
	}
}
public class Test1 {
	public static void main(String[] args) {
				
		Color2 c2 = new Color2();		
		System.out.println(c2.getName1()); //赤 青
	}
}

注意事項 (変数の型とインスタンスの型)

17行目は、派生クラスをインスタンス化していますが、変数の型は基底クラスの型Color1です。
18行目で実行されるメソッドは、派生クラスのメソッドです。
変数の型ではなくインスタンスの型で実行されるので注意が必要です。
→メソッド名が同じオーバーライドの場合です。オーバーライドでない場合、実行できるメソッドは代入する変数の型に制限されます。Java 変数の型変換のサンプル(基本型と参照型)

package test1;

class Color1 {
	String getName1() {
		return "赤";
	}
}
class Color2 extends Color1{
	@Override
	String getName1() {
		return "青";
	}
}
public class Test1 {
	public static void main(String[] args) {
				
		Color1 c1 = new Color2();		
		System.out.println(c1.getName1()); //青
	}
}

関連の記事

Java クラスのサンプル
Java コンストラクタのサンプル
Java クラスの継承のサンプル
Java オーバーロードのサンプル

△上に戻る