2022-03-18
今回は内部クラスの説明をしていきたいと思います。
継承と修飾子の知識があればすぐ理解できてしまいますが、これは自分用のメモ
同然なのでご勘弁を。
用意するもの
■外部クラス
・publicなクラス
・メソッド
■内部クラス
・privateメンバ変数
・getter・setter
■mainクラス
目的
普段はprivateフィールドは自分以外のクラス(外部のクラス)からはアクセスすることはできないです。
が、外部クラスとその中にある内部クラスを関連付けることで関連性が読み取ることができて
そのクラスが何をしたいのかを明確にすることができます。
あるクラスの中でピンポイントにクラスに用がある時や、役割ごとにクラスを
区分けして見やすくしたい時によく使われます。
コード
class Castle{ //フィールドにメンバを設置 public Gate i; class Gate{ //ProtoCastleからのみアクセスを許可する private String message; public String getName(){ return message; } public void setName(String message){ this.message = message; } } //内部クラスの外のメソッド public static gateOpen(){ i = new Gate();//iにアクセスしてGateインスタンス生成 //内部クラスのメソッドにメッセージを渡す i.setName("開門"); } } public class ProtoCastle { public static void main(String[]args){ Castle castle = new Castle(); castle.gateOpen(); System.out.println(castle.i.getName()); } }
CastleクラスではiにアクセスしてGateインスタンスを生成しています。
インスタンス生成後開門メッセージを送っていますね。
内部クラスと紐付けることで内部クラスのメソッドも使える様になりました。
main側ではgateOpenメソッドでsetName後にgetNameで送ったメッセージを
System.out.printlnで確認しています。
内部クラスの動きはこんな感じ。
クラスの関係性を限定的にできたので、かなり見やすいコードになったんじゃないかなと
思っています。