Inner Class in Java

Inner Class in Java: Inner Class एक ऐसी Class होती है, जिसे किसी Class के अन्दर Define किया जाता है। इन्हें Nested Class भी कहते हैं। इनका प्रयोग करके हम Program की Coding में Additional Clarity प्राप्त कर सकते हैं। एक Inner Class केवल उसी Class के लिए Available होती है, जिसमें Inner Class को Define किया गया होता है। Inner Class का Object Outer Class के Members को Access करने में सक्षम होता है। यानी हम Inner Class के Object से Outer Class के Data Members व Member Methods को Directly Access कर सकते हैं।

जबकि Outer Class यदि Inner Class के Members को Access करना चाहे, तो वह ये काम Inner Class का एक Object Create करके उस Object के साथ Inner Class के Members का प्रयोग करके कर सकता है। अब हम ये जानेंगे कि हम किस प्रकार से एक Inner Class को Event Handling के लिए Use करके हम Event Adapter Classes को Use करते समय किस तरह से अपनी Coding को Simple बनाए रख सकते हैं।

पिछले Program द्वारा इस Technique को समझने की कोशिश करते हैं, जिसमें Listener Class को Applet Class से बाहर Define किया गया है। इस Applet Class का मुख्‍य Purpose ये है कि जब Applet पर Mouse के किसी Key को Press किया जाए, तब Applet के Status Bar में “Mouse Pressed” String Display होनी चाहिए।

इस Program में दो Top Level Classes Define की गई हैं। एक Event Source Class को Applet Class से Extend किया गया है जबकि Event Listener Class को MouseAdapter Class से Extend किया गया है। इस Program में हम देख सकते हैं कि Applet का Reference Argument के रूप में MyMouseListener Constructor को दिया गया है। इस Reference को बाद में mousePressed() Method में Use करने के लिए एक adapterApplet Object में Store करके रखा गया है।

जब Mouse का कोई Button Press किया जाता है, तब mousePressed() Method उस Applet के showStatus() Method को Invoke करता है, जिसके Reference को adapterApplet नाम के AdapterApplet Class के Object में Store करके रखा गया है। दूसरे शब्दों में कहें तो showStatus() Method को Actual Applet के Reference Object adapterApplet के Reference द्वारा Call किया गया है। इसी काम को हम एक Inner Class का प्रयोग करके भी कर सकते हैं, जिसे अगले Program में Explain किया गया है।

	// File Name : InnerAdapterApplet.java
	import java.awt.*;
	import java.awt.event.*;
	import java.applet.*;
	
	public class InnerAdapterApplet extends Applet{
		public void init(){
			addMouseListener(new MyMouseListener());
		}
	
		class MyMouseListener extends MouseAdapter{
			public void mousePressed(MouseEvent mousEvnt){
				showStatus("Mouse Pressed");
			}
		}
	}

ये Program भी वही काम करता है, जो पिछला Program करता है। इस Program के Applet पर भी जब हम Click करते हैं, तब Applet के Status Bar में “Mouse Pressed” String Display होता है।

लेकिन हम देख सकते हैं, कि इस Program में हमें कितने कम काम करने पडते हैं। जिस तरह से हम किसी Applet में Inner Adapter Classes Define करके Applet के Events Handle कर सकते हैं, उसी तरह से हम किसी Application में भी कर सकते हैं। इस प्रक्रिया को हम निम्न Program द्वारा समझ सकते हैं, जिसमें एक Frame Window को Close करने के लिए Window के windowClosing() Method को Implement किया जा रहा है।

	// File Name : InnerAdapterApp.java
	import java.awt.*;
	import java.awt.event.*;
	
	public class InnerAdapterApp extends Frame
	{
		// main() Method
		public static void main(String args[])
		{
			InnerAdapterApp window = new InnerAdapterApp();
		}
	
		// Constructor of the InnerAdapterApp Class
		public InnerAdapterApp()
		{
			// Register the Frame Window with the Listener 
			MyWindowListener listenWindowEvent = new MyWindowListener();
			addWindowListener(listenWindowEvent);
	
			setVisible(true);
			setSize(150,100);
		}
	
		// Inner Class Definition
		class MyWindowListener extends WindowAdapter
		{
			// Window Closing Event Handler
			public void windowClosing(WindowEvent wndEvnt)
			{
				InnerAdapterApp source = (InnerAdapterApp)wndEvnt.getSource();
				source.dispose();
				System.exit(0);
			}
		}
	}

इस Program को Execute करने पर सबसे पहले main() Method Execute होता है। इस Method में InnerAdapterApp Class का एक Object Create किया गया है। जब इस Class का Object Create किया जाता है, तब इस Class का Constructor Execute होता है। ये Frame Window Event Generate करने वाले Source की तरह काम करता है।

Window से Generate होने वाले Window Events को Listen करने के लिए इसी Class में एक Inner Class Define की गई है और इस Inner Class को WindowAdapter Class से Derive किया गया है। Current InnerAdapterApp Class से Generate होने वाले Events को Listener पर भेजने के लिए addWindowListener() Method का प्रयोग किया गया है और Argument के रूप में इस Method में MyWindowListener Class के listenWindowEvent Object को Pass किया गया है।

चूंकि Current Class को ही Event Generator के रूप में Use किया जा रहा है, इसलिए इसके Object के साथ इस Registration Method को Call करने की जरूरत नहीं है। हम Directly addWindowListener() Method को Call कर सकते हैं।

जब Window को Close करने के लिए Window के Close Button पर Click करते हैं, तब एक WindowEvent Generate होता है। ये Window Event Listener Object Listen करता है और Event के Response में Listener Class का windowClosing() Method Execute होता है। इस Method के Execute होते ही इसमें Frame Window Class का source नाम का एक Object Create किया जाता है।

चूंकि wndEvnt Window Event Object में उस Window को Reference होता है, जिसने Event Generate किया होता है। इसलिए getSource() Method का प्रयोग करके उस Window का Reference प्राप्त कर लिया जाता है, जिसने Event Generate किया होता है। अब Event Generate करने वाले Window को हम source Object द्वारा Refer कर सकते हैं।

इसलिए जब हम source Object के लिए dispose() Method को Call करते हैं, तो वह Actual Frame Window के लिए Call होता है और Frame Window को Close कर देता है। इस तरह से हम किसी Application में भी Inner Class के रूप में Adapter Class को Extend करके Event Handling कर सकते हैं।

इस उदाहरण में हमने देखा कि Events को Handle करने के लिए हम एक Separate Inner Class Define कर सकते हैं, जो कि Outer Class से Generate होने वाले Events को Listen करने के लिए Required Listener Interfaces को Implement करता है। पिछले Program में हमने Outer Class के Constructor में Inner Class का एक Object Create किया है।

चूंकि मुख्‍य Class में हमने Listener Class को Inner Class की तरह Define किया है और हम समझ सकते हैं कि दोनों ही Classes एक दूसरे से Unrelated हैं, जबकि दोनों Classes आपस में मिलकर Event Handling का काम करती हैं। यानी मुख्‍य InnerAdapterApp Frame Class Event Generate करने वाली Source Class है, जबकि Inner Class Outer Class से Generate होने वाली Events को Listen करने वाली Listener Class है।

दो Unrelated Classes को आपस में Related करने के लिए हमें मुख्‍य Class में दूसरी Class का एक Object Create करना पडता है, फिर चाहे वह दूसरी Class कोई Inner Class हो या कोई अन्‍य Class हो। यानी हमें Composition Concept को Use करना होता है।

जब हम किसी Class में किसी दूसरी Unrelated Class का Object Create करके दोनों Classes के बीच किसी प्रकार का Relation बनाते हैं, ताकि दोनों Classes आपस में मिलकर किसी काम को पूरा कर सकें, तो इस प्रक्रिया को दूसरी Class का पहली Class में Compose होना कहते हैं।

हमारे Program की मुख्‍य Class या Outer Class के Constructor में हमने Inner Class का Object Create करके उसे मुख्‍य Class में Compose किया है। ऐसा करने पर दो Unrelated Classes आपस में Relate हो जाती हैं। Inner Class का एक Object Outer Class में एक Data Member की तरह Create करने के लिए हमने new Operator को Use किया है। यदि हम चाहें तो दो Unrelated Classes को आपस में निम्नानुसार Coding द्वारा भी Relate कर सकते हैं:

OuterClass out = new OuterClass(“Title”);
out.InnerUnrelatedClass inUnrelated = new OuterClass().InnerUnrelatedClass();

हम किसी Method की Body में भी किसी Class को Define कर सकते हैं। इस स्थिति में Inner Class उस Method की Body में Define किए गए Variables को भी Access करने में सक्षम हो जाती है, जिसमें Inner Class को Define किया गया है। जब हम इस प्रक्रिया को Use करना चाहते हैं, तब हमें Inner Class को हमेंशा Method के Variables को Declare करने के बाद Define करना चाहिए, ताकि Inner Class Method के उन Variables को Access कर सके।

Java Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

Java Programming Language in Hindi | Page: 682 | Format: PDF

BUY NOW GET DEMO REVIEWS