"హాయ్, అమిగో!"
"ఇంకో చిన్న చిన్న అంశం స్థానిక తరగతులు ."
"మీరు చూసినట్లుగా, మీరు వేర్వేరు ఫైల్లలో మాత్రమే కాకుండా ఇతర తరగతులలో కూడా తరగతులను సృష్టించవచ్చు. అయితే అంతే కాదు. తరగతులను పద్ధతుల్లో కూడా సృష్టించవచ్చు. ఈ తరగతులను స్థానిక తరగతులు అంటారు. అవి సాధారణ అంతర్గత తరగతుల వలె పనిచేస్తాయి, కానీ వారు ప్రకటించబడిన పద్ధతులలో వాటిని ఉపయోగించవచ్చు."
"స్క్రీన్ వైపు చూడు:"
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;
}
}
"మరి మనకు అలాంటి తరగతులు ఎందుకు అవసరం?"
"ఒక క్లాస్ని దాని అన్ని కన్స్ట్రక్టర్లు మరియు మెథడ్స్తో, ఒక పద్ధతిలో ఉంచడం వల్ల చాలా చదవగలిగే కోడ్ని పొందలేము, మీరు అనుకుంటున్నారా?"
"సరిగ్గా. మీరు చెప్పింది పూర్తిగా నిజం."
"మీరు పద్ధతుల లోపల అనామక అంతర్గత తరగతులను కూడా ఉపయోగించవచ్చు. కానీ ఈ తరగతులకు ఒక చిన్న ప్రయోజనం ఉంది, తత్ఫలితంగా, అవి చాలా తరచుగా పద్ధతుల్లో ఉపయోగించబడతాయి."
"ఒక పద్ధతిలో ప్రకటించబడిన తరగతి ఆ పద్ధతి యొక్క స్థానిక వేరియబుల్స్ను ఉపయోగించవచ్చు:"
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;
}
}
"కానీ ఒక పరిమితి ఉంది: వేరియబుల్స్ «చదవడానికి మాత్రమే»-అవి మార్చబడవు."
"ఆ పరిమితి ఎందుకు ఉంది:"
"ఒక పద్ధతిలో డిక్లేర్డ్ చేయబడిన తరగతులు కీవర్డ్ ఫైనల్ని ఉపయోగించి డిక్లేర్ చేయబడిన మెథడ్ వేరియబుల్స్ను మాత్రమే యాక్సెస్ చేయగలవు. పై ఉదాహరణలో, నేను వెంటనే i విలువను పోలీసు నంబర్కి కేటాయించలేనని మీరు చూడవచ్చు. బదులుగా, నేను మొదట దాన్ని చివరి వేరియబుల్ సంఖ్య."
"పద్ధతి యొక్క వేరియబుల్స్ని ఉపయోగించగలగడం చాలా బాగుంది. నేను దానిని సరిగ్గా అభినందిస్తానని ఆశిస్తున్నాను. అయితే మీరు వేరియబుల్స్ని మార్చలేకపోవడం చాలా చెడ్డది."
"వాటిని ఎందుకు మార్చలేకపోతున్నావో ఈరోజు ఎల్లీ నీకు వివరిస్తాను. ఇంతలో, నేను ఒక గంట సేపు కునుకు తీస్తాను."
"గుడ్ నైట్, కిమ్. ఆసక్తికరమైన పాఠానికి ధన్యవాదాలు."
GO TO FULL VERSION