徹底攻略Java SE 11 Gold問題集(黒本)を読んで最初にぶち当たる壁「内部クラス」ついて、4つの記事に分けてまとめました。
僕のようなJava初心者や、JavaGoldの資格取得に向けて、勉強をしている方にこの記事がお役に立てれば幸いです。
#はじめに
内部クラスには4種類あります。
今回はその中のstaticインナークラスについて解説していきます。
・インナークラス
・staticインナークラス👈
・ローカルクラス
・匿名クラス
##staticインナークラスとは?
一言で表すと、クラスの中で定義したstaticで修飾したクラスのことを指します。
知っておいて頂きたい特徴が2点ごさます.
・外部クラスの非staticなフィールドやメソッドにはアクセスできない
・外部クラスのインスタンが無くても、インスタンス生成ができる
この2点の特徴から分かるように外部クラスやそのインスタンスとの関係が比較的薄いです。
例えるなら、従兄弟みたいな感じでしょうか。
身内だけど家族よりは親近感が薄いよねってことをイメージして頂ければ結構です。
##どの場面で必要か?
別のクラスとして分離する必要がなく、外部クラスのインスタンス生成が必要ない時
例えば、あるMapを色々な要素でソートをかけられるようにしたい場合があったとします。
また、そのMapを並べるだけの実装なのでわざわざ別クラスとして分離しておく必要はありません。
そうのような場面にstaticインナークラスを利用します。
#どのように使うの?
###定義方法
下記のコードのようにクラスの中にstaticで修飾されたクラスを定義するだけです。
public class Outer{
public static class Inner{
public void sample(){
System.out.println("staticインナークラスです。");
}
}
}
下記の表はインナークラスとアクセス修飾子の関係を表しています。
public | protected | private | final | static |
---|---|---|---|---|
○ | ○ | ○ | ○ | ○ |
##インナークラスのインスタンスの生成方法 | ||||
外部クラスのインスタンが無くてもインスタンスが生成できます。 |
public class Main{
public void main (String[] args){
Outer.Inner inner = new Outer.Inner();
inner.sample();
}
}
結果
staticインナークラスです。
外部クラスの非staticなフィールドやメソッドにはアクセスできないのでご注意ください。
#まとめ
・staticインナ-クラスとは、クラスの中に定義したstaticで就職されたクラスのこと
・外部クラスのインスタンが無くても、インスタンス生成ができる
##参考文献
・徹底攻略Java SE 11 Gold問題集
・【Java】内部クラス(インナークラス)の使い方