Java入門season5~オブジェクト指向~
やっほー。昨日の雷すごかったですねぇ。近所にも何発か落ちましてすごい音がしました。ちなみに中の人は雷が鳴り響く中でyoutubeで落雷映像集を見ていました。雷が好きなので。
さて、今回の本題はオブジェクト指向です。いよいよJava感が出てきました。Javaはオブジェクト指向型の言語です。同じタイプの言語にはpythonやRubyなんかがあります。
★オブジェクト指向って何?
共通的なモノをあらかじめ作っておくこと。よくある例えに車の例えがあります。
3種類の車があるとき、それぞれに対して設計図を作るのもよいですが、最初に「車」という「モノ」の設計図を作り、後からそれぞれの種類に合わせてカスタマイズしようというのがオブジェクト指向です。なので、後述しますが、クラス継承という形でオリジナルの設計図の一部をカスタマイズして変更できます。書いているうちに何となくわかりますがクラス内のインスタンスがオブジェトです。
このタイプの言語は使う人間の能力に大きく依存しそうですね…
★インスタンスを生成しよう!
インスタンスの生成の仕方は簡単です。
インスタンスは、(クラス名)(変数名/インスタンス) = new (クラス名())として、右辺で生成したインスタンスを変数に持たせます。作った変数がインスタンスという名前をつけられているだけです。同じメソッドを元にしてインスタンスをいくらでも作れるので便利です。
**画像は消去しました(2018/08/29)**
インスタンスメソッドを定義しました。mainメソッドで呼び出すので当然のことながらインスタンスメソッドのクラスにはmainはありません。インスタンスメソッドでは、public (戻り値の型) (メソッド名)とします。では、mainメソッド内を見てみます。
**画像は消去しました(2018/08/29)**
先ほど作ったインスタンスの下に(インスタンス名).(メソッド名)とあります。ここでインスタンスメソッドを呼び出しています。
★インスタンスフィールドについて
インスタンスフィールドとは何か?平たく言えば(中の人の感覚ですが)、インスタンスメソッド内で使う変数の宣言のことです。単なる変数宣言と同じです。
形式はpublic (変数型)(変数名)です。publicがついている以外にはいつもの「int a」などの変数宣言と何ら変わらないです。main内でインスタンスフィールドにアクセスする場合、要はインスタンスフィールド内の変数に値を代入する場合は、
(インスタンス名).(変数名)とします。簡単。実際のレッスンで見てみましょう。
**画像は消去しました(2018/08/29)**
nameという変数を定義しておきます。これがインスタンスフィールドと呼ばれるものです。ここでnameを変数として宣言しておくことで、main内でnameに何らかの値を渡した際に、その値に対してPersonクラスにアクセスしインスタンスメソッドを実行してくれます。main内はこんな感じ。
**画像は消去しました(2018/08/29)**
見てみると、nameに値を代入した後、インスタンスメソッドを呼び出して出力しています。
★コンストラクタに関して
コンストラクタって何?って感じですよね。ざっくりというと、インスタンスメソッド内の変数(インスタンスフィールド)に外部の変数を渡す部分です。
例えばこんな感じ。(先ほどのものとは全く異なるインスタンスクラスです)
順に追っていくと、
・Maguro(String name, int swimSpeed)となっているところがコンストラクタです。何をしているのかというと、
main内のインスタンス呼出し(これまでの例でいうところのperson1.hello())に引数を渡すと、コンストラクタの中で、インスタンスメソッドでも同じ値が使えるように代入してくれています。流れ的には、main内の呼び出しの引数=コンストラクタ内の右辺→this.(インスタンスフィールド)に渡す→インスタンスメソッド内で引数を使って処理が可能になる、といった感じです。ここまではそんなにハードではないですね。
**修正**
class Maguro → class Fishに修正します。(2018/08/29)
main内でprofileメソッドに様々な魚のnameとswimSpeedを引数として渡すと「(魚の名前)の泳ぐ速さは(速さ)です」といい感じに出てきます。
今回はここまで。次回もオブジェクト指向の話をしていきます。