徹底攻略Java SE 11 Gold問題集(黒本)を読んで最初にぶち当たる壁「内部クラス」ついて、4つの記事に分けてまとめました。
僕のようなJava初心者や、JavaGoldの資格取得に向けて、勉強をしている方にこの記事がお役に立てれば幸いです。
#はじめに
内部クラスには4種類あります。
今回はその中のローカルクラスについて解説していきます。
・インナークラス
・staticインナークラス
・ローカルクラス👈
・匿名クラス
##ローカルクラスとは?
一言で表すと、メソッドの中にクラスを定義したクラスのことを指します。
メソッドごとに実装内容を変えることできます。
知っておいて頂きたいルールが2点ごさます.
・ローカルクラスが参照するローカル変数はローカルクラスの定義よりも前に定義される
・ローカルクラスから参照するローカル変数は実質的にfinalでなければいけない
この2点が守れないとコンパイルエラーになります。
###ローカルクラスとアクセス修飾子の関係
下記の表はローカルクラスとアクセス修飾子の関係を表しています。
public | protected | private | abstract | final | static |
---|---|---|---|---|---|
× | × | × | ○ | ○ | × |
上記の表で×のアクセス修飾子を定義するとコンパイルエラーになるので注意してください。
##どの場面で必要か?
そこそこ複雑な初期化や、処理を持つもののコンラクター内でしか必要のないクラスが出てるくる場合がよくあります。
そういった場合匿名クラスを実装すると、可読性に欠けるので、そういった時にローカルクラスを利用します。
#どのように使うの?
###定義方法
下記のコードのようにメソッドの中にクラスを定義するだけです。
インスタンスの生成方法は同じメソッド内でローカルクラスのインスタンスを生成します。
下記のコードの例だとexcuteメソッドのスコープ内で定義をします。
public class Outer{
public void execute(){
class LocalClass{
void localExecute(){
System.out.println("ローカルクラスのメソッドです。");
}
}
//ローカルクラスをインスタンス化
LocalClass local = new LocalClass();
local.localExecute();
}
}
##実装結果
public class Main{
public void main (String[] args){
Outer.outer = new Outer.();
outer.execute();
}
}
結果
ローカルクラスのメソッドです。
#まとめ
・ローカルクラスとは、メソッド内で定義したクラスのこと
・インスタンスの生成方法は同じメソッド内でローカルクラスのインスタンスを生成します。
##参考文献
・徹底攻略Java SE 11 Gold問題集
・あなたの知らない、4つのマニアックなJava文法
・JAVA インナークラス・ローカルクラス