पाठ 22 / 38

नेस्टेड व इनर क्लास

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

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

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

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

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

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>() { ... }) एक ही एक्सप्रेशन में एक बेनाम, एकबारगी सबक्लास घोषित व इंस्टेंशिएट करती है — फ़ंक्शनल इंटरफ़ेस के लिए अब लैम्ब्डा इसकी जगह लेते हैं, पर कई मेथड/स्टेट वाली क्लास के लिए अब भी उपयोगी है।