"Hej, Amigo!"
"Et andet lille bitte emne er lokale klasser ."
"Som du har set, kan du oprette klasser ikke kun i separate filer, men også inde i andre klasser. Men det er ikke alt. Klasser kan også oprettes inden for metoder. Disse klasser kaldes lokale klasser. De fungerer som almindelige indre klasser, men de kan bruges inden for de metoder, de er deklareret i."
"Se på skærmen:"
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;
}
}
"Og hvorfor har vi brug for sådanne klasser?"
"At placere en klasse med alle dens konstruktører og metoder i en metode giver ikke særlig læsbar kode, synes du ikke?"
"Nøjagtig. Du har fuldstændig ret."
"Du kan også bruge anonyme indre klasser inde i metoder. Men disse klasser har en lille fordel, og derfor bruges de inde i metoder ret ofte."
"En klasse, der er erklæret i en metode, kan bruge den metodes lokale variabler:"
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;
}
}
"Men der er én begrænsning: variablerne er "skrivebeskyttede" - de kan ikke ændres."
"Her er grunden til, at begrænsningen eksisterer:"
"Klasser deklareret inden for en metode kan kun få adgang til en metodes variabler, der er erklæret ved hjælp af søgeordet final. I eksemplet ovenfor kan du se, at jeg ikke umiddelbart kan tildele værdien af i til policeNumber. I stedet gemmer jeg den først til endelig variabel nummer."
"At være i stand til at bruge en metodes variabler er superfedt. Jeg håber rigtigt værdsætter det. Det er dog ærgerligt, at du ikke kan ændre variabler."
"Ellie vil forklare dig i dag, hvorfor du ikke kan ændre dem. I mellemtiden vil jeg tage en lur i omkring en time."
"Godnat, Kim. Tak for den interessante lektion."
GO TO FULL VERSION