* Локални класове в Java
Публикувано на 14 октомври 2009 в раздел ПИК3 Java.
"Локални" класове са тези класове, които са дефинирани вътре в програмен блок. Досега знаем как да влагаме класове като членове на даден клас. Когато говорим за локални класове се има предвид клас, който е създаден в тялото на метод.
Първото и може би най-важно нещо, което трябва да знаем за локалните класове е, че те са валидни само и единствено в програмния блок, в който са дефинирани. Можете веднага да си направите аналогия с "локални променливи".
Ето един пример за локален клас, вложен в метод на клас "потребители":
public class myfirstprogram{
public static void main(String[] args){
User ivan = new User("ivan", 8);
System.out.println(ivan.getUser()+" has pass "+ivan.getPass());
}
}
class User{
private String username;
private String password;
private int id;
private static int userscount = 0;
public User(String username, int len){
System.out.println("\nNew user entering...");
this.username = username;
this.setId();
this.setPass(len);
}
private void setId(){
userscount++;
this.id = userscount;
}
private void setPass(int len){
// Дефинираме локален клас "генератор на пароли"
class PassGenerator{
StringBuffer strb;
public PassGenerator(int len){
strb = new StringBuffer(len);
for (int i=0; i<len; i++){
switch((int)Math.round(Math.random()*2)){
case 0:
this.strb.append((char)((int)'0' + (int)(Math.round(Math.random()*9))));
break;
case 1:
this.strb.append((char)((int)'a' + (int)(Math.round(Math.random()*25))));
break;
case 2:
this.strb.append((char)((int)'A' + (int)(Math.round(Math.random()*25))));
break;
}
}
}
public String getpass(){
return strb.toString();
}
}
// Правим локална инстанция на този локален клас
PassGenerator p = new PassGenerator(len);
this.password = p.getpass();
}
protected String getPass(){
return this.password;
}
public int getId(){
return this.id;
}
public String getUser(){
return this.username;
}
public static void usersOnline(){
System.out.println("Users online: "+userscount);
}
}
Не можем да правим инстанция на клас "PassGenerator" никъде другаде освен вътре в метод "setPass", където този локален клас е деклариран. По този начин казваме, че "PassGenerator е локален клас за метод setPass".
Добави коментар