こんにちは~
気づけばもう、11月も終わりですね。
今回は前回の続きでオブジェクト指向3大機能の最後の一つ、
多態性からいきますよ~
多態性、ポリモーフィズムともいいます。
同じ名前のメソッドを呼び出したときに、
実行される処理がインスタンスの種類によって変わる、
といった機能です。
説明を見ただけではどういうことかわからないと思うので、
簡単な例を書きますと、
Hero warrior = new Warrior(); warrior.attack();
Hero型のwarriorですが、実行されるattackメソッドはHero型ではなく、
Warrior型のattackメソッドが実行されます。※Hero型のattackメソッドを
Warrior型が継承していた場合。
これにどういうメリットがあるかというと、
// 各クラスのインスタンス化 Warrior warrior = new Warrior(); Wizard wizard = new Wizard(); Renger renger = new Renger(); // attackメソッドの呼び出し warrior.attack(); wizard.attack(); renger.attack();
こんなめんどくさいコードが、
// Heroクラスの型配列 Hero[] hero = { new Warrior(), new Wizard(), new Renger() }; // それぞれのattackメソッドを呼び出す for(int i = 0; i < hero.length; i++){ hero[i].attack(); }
こうなります。
それぞれのサブクラスがattackメソッドを継承していれば、これだけで全員の
attackメソッドが呼べます。
また、Heroの人数が増えたとき、多態性を用いてないと、
クラスをインスタンス化してメソッドの呼び出しをするコードを書き加えなければいけません。
多態性を用いれば、配列に加えるだけです。
以上のように多態性は、
①コードが見やすくなる
②変更に強くなる
といった特長があります。
以上、オブジェクト指向の3大機能を見てきましたが、使いこなせれば、
機密性の高く、無駄のないきれいなコードが書けると思います。
ではこのまま次の項目も行っちゃいますよ~
コレクションは配列と違い要素数の上限がありません。
ArrayList、HashSet、HashMapといったものがよく使われます。
なかでもArrayListは添字があり配列とよく似ているものかと思います。
メソッドを使うことで、要素を後から追加したり、
好きな位置に挿入できたり、上書きしたり、削除できたりします。
HashSetは添字がなく、重複要素は入れられないため、
好きな位置に挿入したり、上書き等ができません。
HashMapは添字はありませんがキーを指定することができます。
キーを指定して、要素を追加、取得、削除などができます。
コレクションは配列と使い分けることで真価を発揮する機能だと思います。
Javaの最後の項目にたどり着きました。
例外とは、プログラムの実行中に想定外の事態が発生したことです。
例外にもクラスがありまして、Error、Exception、RuntimeException
といったものがあります。
Errorはどうにもならないのですが、それ以外は例外処理することが可能です。
try-catch文等で処理します。
try { ArrayList<String> list = new ArrayList<>(); // Exceptionを発生させる System.out.println(list.get(-1)); } catch (ArrayIndexOutOfBoundsException e) { // 例外が起きた際の処理 System.out.println("ArrayIndexOutOfBoundsExceptionです"); } catch (Exception e) { System.out.println("Exceptionです"); }
例で使用しているのはtry-catch-catch文です。
例外処理の基本はtryの中に例外が起きるであろう処理を書き、
catchの中に例外が起きた際の処理を書きます。
finallyがある際はfinallyの中の処理は最後に必ず行われます。
例外処理にはtry-catchの他にthrow、throwsといったものもあります。
throwは「throw new 例外用クラス」というように書くことでプログラマー
が例外を意図的に呼び出すことが可能です。
throwsはメソッド内で例外が発生した場合に、
自身のメソッド内でcatchするのではなく、呼ばれる側に例外を投げます。
// mainメソッド public static void main(String[] args) { // try-catch文 try { file("新規ファイル.txt"); } catch (Exception e) { System.out.println("ファイルが見つかりません"); } } // Exceptionを投げるメソッド public static void file(String name) throws Exception { // 与えられた引数のファイルがないのでExceptionをmainメソッドに投げる File file = new File(name); FileReader filereader = new FileReader(file); filereader.close(); }
上記の例では”新規ファイル.txt”というファイルが見つからなかった場合、
fileメソッドはExceptionをmainメソッドに投げてcatch文の処理を実行します。
例外処理は何のために行っているのかわからないとか、難しいとか、
苦手意識を持っている方も多いかと思います。
でも例外処理を組み込むことで使用する側がエラーが起きたときに原因がすぐわかるので、
必須スキルだと思います。
私も苦手意識を持っていますが、使って慣れていこうと思います。
これでJava研修のブログは終わりです。
次回はまた別の題材でブログ書きますのでまた読んでくださいね~
では、また次回のブログでお会いしましょう~