Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaでは同じ名前のメソッドを複数定義することができ、このような記述をオーバーロードと呼びます。

本記事では、初心者向けにJavaのサンプルコードを掲載しながらオーバーロードの使い方と似た名前で勘違いしやすいオーバーライドとの違いについてご紹介していきます。

Javaのオーバーロードって何?


Javaでは、同じ名前で引数の数や型が異なるメソッドを複数定義することをオーバーロードと呼びます。

ポテパンダの一言メモ

日本語では多重定義と呼ぶこともあるようです。

オーバーロードを利用する理由

オーバーロードは、似た処理を利用したいけれども引数やデータ型などは様々なパターンで使用したいという場合に有効です。

全く異なる名前のメソッドを用意するよりも、同じ名前で引数情報だけを切り替えるオーバーロードを使用することでコードの可読性が高くなります。

オーバーライドとの違い

Javaには、オーバーロードと似た名前で「オーバーライド」という機能も存在します。

オーバーライドはクラスを継承した際、親クラスと同じ名前のメソッドを子クラスで定義し直すことを指します。

オーバーロードが同一クラス間で実施されるのに対し、オーバーライドは継承クラスの間で実施される機能です。

Javaにおけるオーバーロードの使い方


ここからは実際にJavaでのオーバーロードの使い方をご紹介していきます。

記述方法

オーバーロードは、引数の数や型が違う同じ名前のメソッドを記述します。

メソッド名(データ型 変数名) {
  処理1;
}
メソッド名(データ型 変数名, データ型 変数名) {
  処理2;
}
メソッド名(データ型 変数名, データ型 変数名, データ型 変数名) {
  処理3;
}

例えば下記の記述は全て同名メソッドですがオーバーロード機能により全て有効なメソッドとして利用可能です。

sampleMethod(String var1) {
  処理1;
}
sampleMethod(String var1, int var2) {
  処理2;
}
sampleMethod(int var1) {
  処理3;
}
sampleMethod(int var1, String var2) {
  処理4;
}

使い方

では実際に使う際はどのように定義するのかというと、利用したいオーバーロードのメソッド引数に一致するように呼び出すだけです。

例えばサンプルとして挙げた「sampleMethod」を上から順番に呼び出す場合

sampleMethod("テスト"); // 処理1
sampleMethod("テスト", 1); // 処理2
sampleMethod(1); // 処理3
sampleMethod(1, "テスト"); // 処理4

それぞれ呼び出し元で定義した引数と合致するオーバーロードメソッドの処理が呼び出されます。

NGパターン

オーバーロードでは、引数の数や型が同じで変数名を変更しただけのメソッドや、戻り値だけが変更されたメソッドなどは定義出来ません。

void sampleMethod(String var1) {};
void sampleMethod(String sample){};
String sampleMethod(String var1) {};

1行目と2行目は型が同じで変数名が異なるだけなのでどちらかしか定義出来ず、1,2行目と3行目は引数が同じで戻り値が異なるだけなのでどちらかしか定義出来ません。

オーバーロードを使用したJavaのサンプルコード


オーバーロードの使い方を確認出来たので、実際のサンプルコードでどのような処理の流れとなるのか紹介していきます。

メソッドのオーバーロード

まずは上述しているメソッドのオーバーロードを簡単なJavaプログラムで動作確認してみましょう。

public class Main {

	public static void main(String[] args) {
		Person person = new Person();
		person.setInfo("山田");
		person.setInfo(30);
		person.setInfo("佐藤", 24);
	}
}

class Person {
	String name;
	int age;
	
	public void setInfo(String name) {
		this.name = name;
		System.out.println("nameを" + name + "に上書きしました。");
	}
	
	public void setInfo(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("nameを" + name +  " ageを" + age +  "に上書きしました。");
	}
	
	public void setInfo(int age) {
		this.age = age;
		System.out.println("ageを" + age + "に上書きしました。");
	}
	
}

実行結果が下記です。

nameを山田に上書きしました。
ageを30に上書きしました。
nameを佐藤 ageを24に上書きしました。

Personクラスに定義された同名メソッドを呼び出していますが、引数毎にそれぞれ対応した処理が呼び出されていることをご確認頂けます。

コンストラクタのオーバーロード

これまでオーバーロードの説明をメソッドで行ってきましたが、コンストラクタに対しても使用することが出来ます。

上記のPersonクラスを修正してコンストラクタのオーバーロードを試してみましょう。

public class Main {

	public static void main(String[] args) {
		Person person1 = new Person("山田");
		person1.introduce();
		Person person2 = new Person(30);
		person2.introduce();
		Person person3 = new Person("佐藤", 24);
		person3.introduce();
	}
}

class Person {
	String name;
	int age;
	
	Person(String name) {
		this.name = name;
		this.age = 999;
	}
	
	Person(int age) {
		this.name = "名無し";
		this.age = age;
	}
	
	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void introduce() {
		System.out.println("名前は:" + name + " 年齢は:" + age + "です。");
	}
	
}

実行結果は下記です。

名前は:山田 年齢は:999です。
名前は:名無し 年齢は:30です。
名前は:佐藤 年齢は:24です。

コンストラクタのオーバーロードでは、初期値を設定することが可能なため、基本は固定値で特定の値を設定したい場合のみ引数として渡すような運用も可能です。

さいごに: Javaのオーバーロードを使ってコードを最適化しよう


本記事では、Javaで利用可能なオーバーロードについてご紹介してきました。

オーバーロードは便利な機能であり、Javaプログラミングでの必須知識の1つです。

オーバーロードとオーバーライドの違いをしっかりと把握した上で、コードを最適化するために積極的に活用していきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。