# नेस्टेड व इनर क्लास — कोर जावा

Source: https://www.geekswithgeeks.com/hi/core-java/java-inner-classes

> स्टैटिक नेस्टेड क्लास, नॉन-स्टैटिक इनर क्लास, लोकल क्लास और एनॉनिमस क्लास में अंतर समझें, और हर एक कब उपयोगी है यह देखें।

## स्टैटिक नेस्टेड बनाम इनर

**स्टैटिक नेस्टेड क्लास** (`static class Node {...}`) बस दूसरी क्लास के भीतर नामस्थान वाली सामान्य क्लास है — इसका बाहरी इंस्टेंस से कोई जुड़ाव नहीं। **नॉन-स्टैटिक इनर क्लास** एक बाहरी इंस्टेंस से जुड़ी होती है और उसकी फ़ील्ड सीधे एक्सेस कर सकती है, पर बनाने के लिए `outer.new Inner()` चाहिए।

## इनर क्लास का उदाहरण

यहाँ `Iterator` नॉन-स्टैटिक है, इसलिए यह कंटेनर द्वारा स्पष्ट रूप से भेजे बिना `items` को सीधे पढ़ सकता है।

```java
class Playlist {
    private final List<String> items = new ArrayList<>();

    class Cursor {                 // non-static inner class
        int pos = 0;
        String next() { return items.get(pos++); }
    }
}

Playlist p = new Playlist();
Playlist.Cursor c = p.new Cursor();
```

## लोकल व एनॉनिमस क्लास

**लोकल क्लास** मेथड बॉडी के भीतर घोषित होती है, सिर्फ़ वहीं दिखती है। **एनॉनिमस क्लास** (`new Comparator<String>() { ... }`) एक ही एक्सप्रेशन में एक बेनाम, एकबारगी सबक्लास घोषित व इंस्टेंशिएट करती है — फ़ंक्शनल इंटरफ़ेस के लिए अब लैम्ब्डा इसकी जगह लेते हैं, पर कई मेथड/स्टेट वाली क्लास के लिए अब भी उपयोगी है।
