石田修二 > コンピュータメモ > Java >    (サイト内検索

オーバーロード

オーバーロードとは

多重定義とも呼ばれます。同じクラス内に,同じ名前で,異なる引数の型の並びのメソッドを複数定義できる仕組みのことです。

Wikipedia「多重定義」

例1

オーバーロードの作成

クラス「Shohin」にオーバーロードしたコンストラクタを追加します。

/* 商品データを1件管理するクラス(コンストラクタのオーバーロード) */
public class Shohin {
	// フィールド
	private String name; // 名前
	private int price; // 価格
	
	// コンストラクタ(引数なし)
	/* 引数で受け取る値をフィールド「name」「price」に格納 */
	public Shohin(){
		/* クラス内のセンターメソッドを呼び出す */
		this.setName("xxxxx 商品");
	}
	
	// コンストラクタ(引数あり)
	/* 引数で受け取る値をフィールド「name」「price」に格納 */
	public Shohin(String name, int price){
		/* クラス内のセッターメソッドを呼び出す */
		this.setName(name);
		/* クラス内のセッターメソッドを呼び出す */
		this.setPrice(price);
	}
	
	// セッターメソッド
	/* メソッド:引数で受け取る値をフィールド「name」に格納 */
	public void setName(String name){
		this.name = name;
	}
	
	/* メソッド:引数で受け取る値をフィールド「price」に格納 */
	public void setPrice(int price){
		this.price = price;
	}
	
	// ゲッターメソッド
	/* メソッド:フィールド「name」に設定されている値を取得 */
	public String getName(){
		return this.name;
	}
	
	/* メソッド:フィールド「price」に格納されている値を取得 */
	public int getPrice(){
		return this.price;
	}
}

オーバーロードしたコンストラクタを利用した値の設定

次に main メソッドを持つクラス「Overload」を作成します。

/* 
 * Shohinクラスにアクセスするmainメソッドをもつクラス 
 * 【オーバーロードしたコンストラクタの利用】
 */
public class Overload {
	public static void main(String[] args) {
		
		// オブジェクト「shohin1」の作成,フィールドに値の設定
		/* オーバーロードした引数なしのコンストラクタの利用 */
		Shohin shohin1 = new Shohin();
		
		// オブジェクト「shohin2」の作成,フィールドに値を設定する
		/* 引数ありのコンストラクタの利用 */
		Shohin shohin2 = new Shohin("日替わり幕の内弁当", 480);
		
		// オブジェクトのフィールドに設定されている値の出力
		System.out.println("オブジェクトのフィールドに設定されている値の確認(メソッドの利用)");
		
		/* ゲッターメソッドを利用して,オブジェクト「shohin1」の確認 */
		System.out.print("■確認 [shohin1] ");
		System.out.print("(品名):" + shohin1.getName());
		System.out.print(" ");
		System.out.print("(価格):" + shohin1.getPrice() + "円");
		System.out.print("\n");
		
		/* ゲッターメソッドを利用して,オブジェクト「shohin1」の確認 */
		System.out.print("■確認 [shohin2] ");
		System.out.print("(品名):" + shohin2.getName());
		System.out.print(" ");
		System.out.print("(価格):" + shohin2.getPrice() + "円");
		System.out.print("\n");
	}
}

例2

以下のプログラムにメソッドを追加し,インスタンスに処理させる形で,実現できるように変更していきます。

public class work2A {
	public static void main(String[] args) {
		Rect2A r1 = new Rect2A();
		
		r1.x = 10;
		r1.y = 20;
		r1.width = 100;
		r1.height = 50;
		
		System.out.println("長方形 位置(" + r1.x + "," + r1.y + ")幅" + r1.width + ", 高さ" + r1.height);
		
		Rect2A r2 = new Rect2A();
		
		r2.x = 40;
		r2.y= 30;
		r2.width = 60;
		r2.height = 80;
		
		System.out.println("長方形 位置(" + r2.x + "," + r2.y + ")幅" + r2.width + ", 高さ" + r2.height);
	}
}

まず,次のプログラムを用意します(ここでは Rect3A.java という名前で保存します)。

public class Rect3A {
	int x;
	int y;
	int width;
	int height;
	
	void setData(int x0, int y0, int w, int h){
		x = x0;
		y = y0;
		width = w;
		height = h;
	}
	
	void printInfo(){
		System.out.println("長方形 位置(" + x + "," + y + ")幅" + width + ", 高さ" + height);
	}
}

次にこれを利用するメイン側のプログラムを作成します。

public class work3A {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Rect3A r1 = new Rect3A();
		
		r1.setData(10, 20, 100, 50);
		r1.printInfo();
		
		Rect3A r2 = new Rect3A();
		
		r2.setData(40, 30, 60, 80);
		r2.printInfo();
	}
}

これでもいいのですが,実装法を隠すために,アクセス修飾子 private をつけておきましょう。

public class Rect3A {
	private int x;
	private int y;
	private int width;
	private int height;
	
	void setData(int x0, int y0, int w, int h){
		x = x0;
		y = y0;
		width = w;
		height = h;
	}
	
	void printInfo(){
		System.out.println("長方形 位置(" + x + "," + y + ")幅" + width + ", 高さ" + height);
	}
}

リンクはご自由にどうぞ。

【石田修二トップページ】  【コンピュータメモ】 【Java】

Last modified: 2016-04-08 11:10:28