「こんにちは、アミーゴ!」
「もう 1 つの小さなトピックは、ローカル クラスです。」
「これまで見てきたように、クラスは別のファイル内だけでなく、他のクラス内にも作成できます。しかしそれだけではありません。クラスはメソッド内でも作成できます。これらのクラスはローカル クラスと呼ばれます。これらは通常の内部クラスと同じように機能しますが、宣言されているメソッド内で使用できます。」
「画面を見てください。」
例
class Car
{
public ArrayListcreatePoliceCars(int count)
{
ArrayList result = new ArrayList();
class PoliceCar extends Car
{
int policeNumber;
PoliceCar(int policeNumber)
{
this.policeNumber = policeNumber;
}
}
for(int i = 0; i < count; i++)
result.add(new PoliceCar(i));
return result;
}
}
「では、なぜそのようなクラスが必要なのでしょうか?」
「クラスとそのすべてのコンストラクターとメソッドをメソッド内に置くと、コードはあまり読みやすくなりません。」
「その通りです。全くその通りです。」
「メソッド内で匿名の内部クラスを使用することもできます。しかし、これらのクラスには小さな利点が 1 つあるため、メソッド内で頻繁に使用されます。」
「メソッド内で宣言されたクラスは、そのメソッドのローカル変数を使用できます。」
class Car
{
public ArrayListcreatePoliceCars(int count)
{
ArrayList result = new ArrayList();
for(int i = 0; i < count; i++)
{
final int number = i;
result.add(new Car()
{
int policeNumber = number;
});
}
return result;
}
}
「しかし、制限が 1 つあります。変数は「読み取り専用」であり、変更できません。」
「その制限が存在する理由は次のとおりです。」
「メソッド内で宣言されたクラスは、キーワード Final を使用して宣言されたメソッドの変数にのみアクセスできます。上の例では、i の値をすぐに PoliceNumber に代入できないことがわかります。代わりに、最初にそれを最終変数番号。」
「メソッドの変数を使用できるのは非常に素晴らしいことです。それを正しく評価していただければ幸いです。ただし、変数を変更できないのは残念です。」
「今日、エリーがなぜ変更できないのか説明してくれるでしょう。その間、私は1時間ほど昼寝をするつもりです。」
「おやすみ、キム。興味深い授業をありがとう。」
GO TO FULL VERSION