第十一章 
 〜クラス編〜
 メソッド
 前回クラスの中でフィールドとメソッドが出てきたですね!そして今回は、
そのメソッドについて詳しく触れてみたいと思うです。

戻り値と引数
 メソッドについて触れるには絶対にやっておかなければいけないことがこの戻り値と
引数です。以前println()メソッドやreadLine()メソッドをやったときこの二つの言葉
が出てきたことは覚えてるですかね?そのときは、ただたんに使う立場だけだったので
あまり深く考えなかったです。しかしメソッドを自分で作れればかなり便利になると思
うです〜
 戻り値と引数をやる前にメソッドの機能について確認しておくです〜
メソッドは何かの処理を一まとめにしておきたときなどに使うです。前回やったとき
は、足し算は足し算の処理(足し算について処理を1つのまとめる)などにまとめて
たです。でも足し算のときは、式が一行あっただけですね!それでもりっぱな1つの
機能です〜。この1つにする機能を利用すると、同じ処理を何度も書きたいときに一回
呼べばいいだけなので便利です〜。
 それでは、サンプルプログラムを見て行きたいと思うです〜
サンプルプログラム11_1
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
class Rei11_1{
    public static void main(String[] args){
        GoukeiKeisan gk = new GoukeiKeisan();

        gk.setOperand(1, 10);
        gk.sum();
        System.out.println("1〜10までの和は" + gk.ans + "です");

        int ans = gk.sum(5, 10);
        System.out.println("5〜10までの和は" + ans + "です");
    }
}

class GoukeiKeisan{
    int ope1;
    int ope2;
    int ans;

    void setOperand(int a, int b){
        ope1 = a;
        ope2 = b;
    }

    void sum(){
        ans = 0;
        for(int i=ope1; i<=ope2; i++){
            ans += i;
        }
    }

    int sum(int a, int b){
        ans = 0;
        for(int i=a; i<=b; i++){
            ans += i;
        }
        return ans;
    }
}

 今回は、合計を求めるためだけにあるクラスを作成してみたです。
このクラスには、int型のope1、ope2、ansのフィールドと
void setOperand()、void sum()、int sum(int ope1, int ope2)の3つのメソッドが
あるですね!簡単に説明すると次のようになってるです。
 void setOperand()メソッドは、ope1とope2に値を代入しているです。
 void sum()メソッドは、setOperand()メソッドで設定した値で合計を求めるです。
 int sum(int a, int b)メソッドは引数によって受け取った値で合計を求めるです。
そしてこのメソッドで処理した結果は戻り値として結果を返すです。
 引数や戻り値といった言葉がやっぱり出てきたですね!
 まずは引数について説明をするです〜。

 引数というのは、( と ) の間に値を入れてそれをメソッドに渡すという話は、以
前やったですね!実際には、渡された方では、渡したときの値にあわせて宣言されて
いるはずです(実際には宣言されている型に合わせて、値を渡しているので逆です)
例えば、5行目のgk.setOperand(1, 10);というのは、setOperand()メソッドに1と10
を渡しているですね!
そして渡される側はどうなってるかと言うですと・・・
19行目のvoid setOperand(int a, int b)になってるですね!
ここで注目してもらいたのは、()の中です。さっき説明したようにint型が2つあるで
すね!そしてこの2つの変数a,bをGoukeiKeisanクラスのope1、ope2に代入している
です〜。

 もっと簡単に言うですとメソッド名(引数)の引数に合わせて書くです。
例えば、a(int a, double b){}というa()メソッドがあったとしたらこのメソッドに
値を送るには、a(10, 20.5);のように整数、実数で値を渡すです〜
他にもいくつか例をあげるです。
method(int a){}だとしたら・・・   method(10);とかmethod(15);などなど
method(String s){}だとしたら・・・ method("文字列だよ");
method(int[] a, int b){}だとしたら・・・method(arr, 10): ← arrは配列の名前
もし()の中に、値が宣言されてなかったら・・・
それにぴったしの例が6行目のgk.sum();です。これは、何も値を渡さないメソッド
です。そしてこのメソッドは24行目でvoid sum()のように宣言されてるですね!
つまりmethod(){}だとしたら・・・method();で処理をするです〜。

 今度は戻り値についてやるです〜。さっきやった19行目について見てほしいです。
今まで余り触れていなかったvoid setOperand(int a, int b)voidの部分がいった
い何かを説明するです。その前にもう1つ31行目のint sum(int a, int b)も一緒に見
ていくです。これら二つの違いは使用するときに出てくるですね!その違いは5行目
9行目の違いに出てきてるのが分かるかなと思うです。
void setOperand(int a, int b){}のときはgk.setOperand(1, 10);
int sum(int a, int b){]のときはint ans = gk.sum(5, 10);
まずvoidが左にある場合、この型のメソッドは処理をし終わった後に値を返さない
という意味をもっているです。値を返さないというのは、何も戻ってこないという
ことです。次に左側がvoid以外では、左側で宣言された型で値を返すです。
int sum(int a, int b){]のときはint ans = gk.sum(5, 10);を見ても
らえば分かるですがint ans=と書かれているですね!これは、gk.sum(5, 10);を処理
するとint型の値(5〜10までを足した答え)が入ってくるです。つまり
int ans = 45;となってansに代入されるです。なぜ値が返ってくるかと言うですと、
36行目のreturn ans;が値を返している文です。このreturn文のあとの値が戻り値と
なって返っていくです。ここではansの答えが戻り値ですね!それとこのreturnの値
の型
戻り値の型は、統一しないといけないです。
 これがvoidの場合だと値が返ってこないのでint ans = のような式を左側に書かな
くていいのです。だからgk.setOperand(1, 10);だけ書けばいいのです。
 値を返すという意味で戻り値と呼ぶです。戻り値は変数などの型を書くです。
 戻り値がvoid型のときは、int ans = gk.sum(5, 10);のような感じで書くとエラー
になるので気をつけてほしいです。

メソッドの構造
戻り値 メソッド名(引数){
  戻り値がvoid以外の場合return 戻す値;
}
もし戻り値がvoid型でreturnを書きたい場合は、return;と書いてあげればいいです。

長い説明だと分かりにくかったかもしれないので、引数と戻り値を図に示したです。

この図を今回のポイントの一つにしたいと思うです。説明よりずっと図の方が分かり
やすいと思うので。

オーバーロードについて
 なにやら突如謎の詠唱それとも呪文、それとも技の名前!?と言った言葉が出てきた
ですね!このオーバーロードという機能はオブジェクト指向の機能の一つです〜
いったい何なのかと言うですと、じつはこのオーバーロードはさっきのサンプルプロ
グラムですでに出てきているのです。いったいどこがそうなのかと言う前にこのオー
バーロードについて説明するです。そうすると気づいてくるかもしれないですね!
 オーバーロードとは、同じ名前のメソッドを複数定義できると言うことです。でも
ルールにのっとらないで複数定義してしまうと、同じメソッドなのでエラーが出てき
てしまうです。そのルールとは、同じ名前のメソッド名でも引数を変える事によって
複数定義できると言うことです。まさか、もう気づいてしまったですかね?
 その気づいて欲しいメソッドというのはsum()メソッドです。実は、sum()メソッド
を2つ定義していたはずです。
void sum()とint sum(int a, int b)の2つです。この2つのsum()メソッドの引数は片
方は、引数無でもう片方はint型の値を2つ引数でもってるですね!こんな感じで同じ
名前のメソッドでも複数定義することができるです。でも勘違いしがちなのが戻り値
を変えたからと言って複数定義することはできないです。これは覚えておいて欲しい
です。このオーバーロードとは以外に便利なので覚えておいたほうがいいです〜
別に名前を覚える必要はないとは、思うです。名前よりも機能ですね!
できれば名前も一緒に覚えておくといいかもしれないですけどね!

今回というかここでのポイントです〜
オーバーロードとは複数のメソッドを引数を変えることによって定義できる機能

TOPに戻る   Java講座に戻る