オーバーロード- 萌えJava超入門
クラスの継承

オーバーロード

同じ名前で引数の異なるメソッドを定義します。

 method_name(int)  method_name(double)  method_name(int,double)

目次

1. オーバーロードとは


オーバーロード(overload)とは、メソッド名が同じで、引数のデータ型や、数が異なるメソッドを同じクラスの中で、定義することです。

萌えJava超入門 萌えJava超入門
あれ?
名前が同じメソッドって
クラスの中に書けるんでしたっけ?
萌えJava超入門
Javaでは、引数が異なる
場合だけ許されている。


2. オーバーロードの例


以下のサンプルコードでは、method01メソッドがオーバーロードされています。

萌えJava超入門 萌えJava超入門
(int, double) と
(double, int) も
別のメソッドとして
認められるのね。
//Overroad_01.java

public class Overroad_01{

    void method01(){
        System.out.println("引数のデータ型: ()");
    }
    void method01(int a){
        System.out.println("引数のデータ型: (int)");
    }
    void method01(int a, int b){
        System.out.println("引数のデータ型: (int,int)");
    }
    void method01(int a, double b){
        System.out.println("引数のデータ型: (int,double)");
    }
    void method01(double a, int b){
        System.out.println("引数のデータ型: (double,int)");
    }
    public static void main(String[] args){
        Overroad_01 over_road01 = new Overroad_01();
        over_road01.method01(3.14d, 100);
    }
}

萌えJava超入門
使うときは与えた引数と
一致するメソッドが
実行されるぞ。
ファイルを wsフォルダに保存して実行します。

コマンドライン
>cd ws
ws>javac -encoding UTF-8 Overroad_01.java
ws>java Overroad_01
引数のデータ型: (double,int)


mainメソッドにある 「over_road01.method01(3.14d, 100);」 の引数に注目してください。
  第一引数 3.14d double型
  第二引数 100  int型
なので、引数が (double, int) と並んでいる method01メソッドが実行されました。




3. オーバーロードの使用例


以下は、円の面積を計算するサンプルです。
circleメソッドをオーバーロードしています。

circleメソッドの引数に、double を一つ与えた場合、
 引数を半径
 java.lang.Math.PI を円周率
として面積を計算します。

circleメソッドの引数に、double を2つ与えた場合、
 第一引数を半径
 第二引数を円周率
として面積を計算します。
萌えJava超入門
こんなふうに使うと便利だ。
//Area_01.java

public class Area_01{

    //面積を求めます

    public double circle(double redius){
        System.out.print("TypeA ");
        return redius * 2 * Math.PI;
    }
    public double circle(double redius, double pi){
        System.out.print("TypeB ");
        return redius * 2 * pi;
    }

    public static void main(String[] args){
        Area_01 area_01 = new Area_01();
        double area;
        area = area_01.circle(4); //引数:(double)
        System.out.println("面積= " + area);

        area = area_01.circle(4, 3.14); //引数:(double,double)
        System.out.println("面積= " + area);

    }
}
circleメソッドの引数に暗黙的なキャストが効いています。

Area_01.java
を wsフォルダに保存して実行します。

コマンドライン
>cd ws
ws>javac -encoding UTF-8 Area_01.java
ws>java Area_01
TypeA 面積= 25.132741228718345
TypeB 面積= 25.12


円周率のデフォルト値を Math.PI としながら、
引数を2つ与えた場合には、第二引数を円周率として計算するにするようにしています。
もちろんメソッド名を変える方法も考えられますが、より直感的ではないでしょうか。
萌えJava超入門
算数の問題を解くなら
TypeB のメソッドを使うと
いいだろう。
萌えJava超入門 萌えJava超入門
引数を省略して
デフォルト値を使う
イメージね。


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


コンストラクタでも、メソッドと同様にオーバーロードを利用できます。
//Area_02.java

public class Area_02{

    //面積を求めます
    private final double pi;
    public Area_02(){
        //コンストラクタA 引数 ()
        this.pi = Math.PI;
    }
    public Area_02(double pi){
        //コンストラクタB 引数 (double)
        this.pi = pi;
    }
    public double circle(double redius){
        return redius * 2 * pi;
    }

    public static void main(String[] args){
        Area_02 area_02A = new Area_02(); //引数:()
        Area_02 area_02B = new Area_02(3.14d); //引数:(double)

        double area;
        area = area_02A.circle(4);
        System.out.println("コンストラクタA 面積= " + area);

        area = area_02B.circle(4);
        System.out.println("コンストラクタB 面積= " + area);

    }
}
circleメソッドの引数に暗黙的なキャストが効いています。

ファイルを wsフォルダに保存して実行します。

コマンドライン
>cd ws
ws>javac -encoding UTF-8 Area_02.java
ws>java Area_02
コンストラクタA 面積= 25.132741228718345
コンストラクタB 面積= 25.12


萌えJava超入門 萌えJava超入門 萌えJava超入門
今は、コンストラクタでも
オーバーロードできる事だけ
覚えておいてくれ。


5. 類似品注意 オーバーライド


オーバーロードに似た言葉で「オーバーライド」(@Override)という言葉があります。
オーバーライドは、スーパークラスで定義してあったメソッドを
サブクラスで再定義して上書きすることです。
なんとなく使い方まで似ているのでご注意ください。

 オーバーロード : 一つのクラスに、引数の異なる同名のメソッドを定義すること 
 
 オーバーライド :
 (@Override)
スーパークラスに存在するメソッドを、サブクラスで
再定義(上書き)すること。
萌えJava超入門
オーバーライド
本章で取り扱う。
お楽しみに。


お疲れ様でした。




© 2019 awasekagami