🎯
【Java】クラス解説38・ローカルクラス
ローカルクラス
ローカルクラスとは、内部クラスのうち、ブロック内に定義されるクラスです。主にメソッドブロック内で定義されることが多いです。
また、ローカルクラスにprivate
、protected
及びprivate
を付与することはできません。
ローカルクラスをインスタンス化するコード例
public class Main {
public static void main(String... args) {
Fuzi fz = new Fuzi();
fz.use();
}
}
class Fuzi {
// メソッド
void use() {
// メソッドブロック内にローカルクラス Sakura を定義
class Sakura {
public void print() {
System.out.println("サクラ");
}
}
// ローカルクラスをインスタンス化
Sakura sk = new Sakura();
// ローカルクラスのインスタンスから print メソッドを呼び出し
sk.print();
}
}
出力結果
サクラ
外側のクラスのprivateなインスタンス変数にローカルクラスからアクセスするコード例
public class Main {
public static void main(String... args) {
Fuzi fz = new Fuzi();
fz.use();
}
}
class Fuzi {
// private なインスタンス変数
private String name = "サクラ";
void use() {
// ローカルクラス
class Sakura {
public void print() {
// 外側のクラスの private なインスタンス変数にアクセス
System.out.println(name);
}
}
Sakura sk = new Sakura();
sk.print();
}
}
出力結果
サクラ
外側のクラスのprivateなメソッドにローカルクラスからアクセスするコード例
public class Main {
public static void main(String... args) {
Fuzi fz = new Fuzi();
fz.use();
}
}
class Fuzi {
// private なインスタンス変数
private String name = "サクラ";
// private なメソッド
private void print() {
System.out.println(name);
}
void use() {
// ローカルクラス
class Sakura {
public void printName() {
// 外側のクラスの private なメソッドにアクセス
print();
}
}
Sakura sk = new Sakura();
// ローカルクラスのインスタンスから printName メソッドを呼び出し
sk.printName();
}
}
出力結果
サクラ
ローカル変数にアクセスするコード例
ローカルクラスでは、そのクラスが定義されているメソッドやブロックのfinalまたは実質的にfinalなローカル変数にのみアクセスできます。
public class Main {
public static void main(String... args) {
Fuzi fz = new Fuzi();
fz.use();
}
}
class Fuzi {
// final なローカル変数 と 実質的に final なローカル変数 を仮引数として受ける
private void print(String tempName1, String tempName2) {
System.out.println(tempName1 + " と " + tempName2);
}
void use() {
// final なローカル変数
final String finalName = "フジ";
// 実質的に final なローカル変数
String name = "サクラ";
// ローカルクラス
class Sakura {
public void printName() {
// final なローカル変数 と 実質的に final なローカル変数 を実引数として渡す
print(finalName, name);
}
}
Sakura sk = new Sakura();
sk.printName();
}
}
出力結果
フジ と サクラ
Discussion