* Локални класове в 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".
Добави коментар