Abstract Class in Java: कई बार ऐसी स्थितियां होती हैं जब हम जो Super Class बनाते हैं वह केवल एक General Class के रूप में ही Use हो सकती है। ऐसी Class के Direct Object Create नहीं किए जा सकते हैं। ऐसी Class एक तरह से अधूरी Class होती है, जिसमें Declare किए गए सभी Methods को Define या Implement नहीं किया गया होता है। एक ऐसी General Class जिसके सभी गुणों को उसकी सभी Sub Classes Share करें, लेकिन स्वयं उस General Class का Object ना Create किया जा सके, इस प्रकार की Class को Abstract Class कहते हैं।
एक Abstract Class को हमें हमेंशा Inherit करना ही होता है, क्योंकि इस प्रकार की Class में विभिन्न प्रकार के Methods को Declare तो किया जाता है, लेकिन उन्हें Implement या Define नहीं किया जाता है। बल्कि इन्हें उन Sub Classes में Implement करने के लिए छोड दिया जाता है, जिन्हें इस प्रकार की Abstract Classes से Inherit किया जाता है।
Abstract Class एक ऐसी Class होती है जो उसकी सभी Sub Classes की Common Properties व Behaviors यानी Common Attributes व Methods को Describe करती है। चूंकि Abstract Class हमेंशा सभी Derived Classes की Common Things को Describe करती है, इसलिए इसके स्वतंत्र Objects नहीं Create किए जा सकते हैं। क्योंकि Objects हमेंशा Special Classes के Create होते हैं और सभी Sub Classes के Common Members को Represent करने वाली Class भी एक Common या General Class होती है।
उदाहरण के लिए Shape एक General Class है। इसके Direct Object Create नहीं किए जा सकते हैं, बल्कि यदि हमें Shape Object Create करना हो, तो हम Rectangle, Triangle, Circle आदि Shape Object Create कर सकते हैं। लेकिन यदि हम Shape Class का Object Create करना चाहें, तो हम ऐसा नहीं कर सकते हैं। क्योंकि Shape स्वं; कुछ नहीं होता है।
सामान्यतया Abstract Classes तब बनाई जाती हैं, जब कोई Super Class स्वयं किसी Meaningful Object को Represent नहीं करता है, बल्कि किसी Group Of Objects के Common Features को Represent करता है।
हमारे पिछले उदाहरण की Super Class एक Abstract Class है और हमें इसके Object Create करने की जरूरत नहीं है, क्योंकि इसके Objects Meaningful नहीं हैं। यदि हम Figure Class का कोई Object Create करते हैं, तो Figure Class का Object Create करने का कोई Meaning नहीं है क्योंकि Figure स्वं; कुछ नहीं है। लेकिन फिर भी एक Class User किसी Abstract Class के Objects Create कर सकता है।
इस स्थिति में यदि वह चाहे तो Abstract Class के Object के Reference में area() Method को भी Call कर सकता है। लेकिन चूंकि Abstract Class Figure स्वं; किसी Actual Object को Represent नहीं करता है, इसलिए इसके Object के लिए area() Method को Call करने का कोई Meaning नहीं है। इसीलिए इस Class के area() Method में हमने एक Message ही लिखा है।
चूंकि हम जानते हैं कि किसी भी Abstract Class के Object Create करने का कोई मतलब नहीं होता है, फिर भी एक Class User किसी Abstract Class के Object Create कर सकता है। इसलिए यदि User किसी Abstract Class के Object Create करे और User को कोई Error Message प्राप्त हो, इससे बेहतर तो यही है कि User कभी किसी Abstract Class के Object Create ही ना कर सके। ये सुविधा हम जावा के Abstract Methods से प्राप्त कर सकते हैं।
किसी Class को Abstract बनाने के लिए हमें Abstract Class में Define किए जाने वाले सभी Methods को Abstract Keyword के साथ Declare करना होता है। जब हम किसी Class के सभी Methods को Abstract Declare कर देते हैं, तो जावा उस Class को Abstract Class मान लेता है और एक Class User को उस Abstract Class के Object Create नहीं करने देता है।
इस स्थिति में User यदि किसी Abstract Class के Object Create करता है, तो जावा Compiler उसे एक Error Message प्रदान करता है। किसी Method को Abstract Class में Abstract Declare करने के लिए हमें निम्नानुसार Syntax का प्रयोग करना पडता है:
abstract Return_Type Method_Name(Parameter_List);
इस Syntax में हम देख सकते हैं कि इस Method की कोई Body नहीं है, बल्कि Parenthesis के बाद Semicolon का प्रयोग करके Method को Terminate किया गया है। जिस किसी Class में एक या एक से अधिक Abstract Methods होते हैं, उस Class को भी हमें Abstract Declare करना जरूरी हो जाता है। Class को Abstract करने के लिए हमें Class को निम्नानुसार Define करना होता है:
abstract class shape { abstract void area(); }
इस प्रकार से जब हम किसी Class को Abstract कर देते हैं, तब उस Class के Objects को new Operator का प्रयोग करके Directly Create नहीं किया जा सकता है। Abstract Classes व Methods By Default Public होते हैं, इसलिए इनके साथ किसी Access Specifier की जरूरत नहीं होती है। किसी सामान्य Method की तरह ही हम Abstract Constructor व Abstract Static Method Create नहीं कर सकते हैं। कोई भी Class जो कि किसी Abstract Class को Derive करता है, उसमें इन Abstract Methods को Implement करना जरूरी होता है।
यदि हम उस Derived Class में सभी Methods Implement ना करें, तो वह Derived Class भी तब तक Abstract Class बनी रहती है, जब तक हम उसकी Super Class के सभी Methods को Implement ना कर दें। चलिए, एक उदाहरण द्वारा हम Abstract Class व Abstract Method को समझने की कोशिश करते हैं:
// Program // File Name: AbstractClassNMethod.java abstract class SuperClass // Abstract Class { abstract void abstractMethod(); // Abstract Method void SimpleMethod() { System.out.println("Abstract Super Class Method CALLED"); } } class SubClass extends SuperClass { void abstractMethod() { System.out.println("Implemented Super Class Method CALLED"); } } class AbstractClassNMethod { public static void main(String args[]) { SubClass objSubClass = new SubClass(); objSubClass.SimpleMethod(); objSubClass.abstractMethod(); } } // Output Abstract Super Class Method CALLED Implemented Super Class Method CALLED
main() Program में हम देख सकते हैं कि हमने Abstract Super Class का कोई Object Create नहीं किया है। यदि हम ऐसा करने की कोशिश करते हैं, तो जावा Compiler हमें ऐसा करने भी नहीं देता है। किसी Abstract Class के सभी Methods Abstract हों, ऐसा जरूरी नहीं होता है। हम किसी Abstract Class में Simple Methods भी Define कर सकते हैं और इस Simple Method को main() Method Program में किसी Sub Class Object के साथ Directly Use भी कर सकते हैं, जैसाकि हमने इस Program में किया है।
हालांकि Abstract Classes के Object Create नहीं किए जा सकते हैं, लेकिन फिर भी Super Class का Reference Create किया जा सकता है, क्योंकि जावा में Run Time Polymorphism को Super Class के Reference द्वारा ही Implement किया जा सकता है। इसलिए ये जरूरी होता है कि हम किसी Abstract Super Class के भी Reference Create कर सकें, जो उस Abstract Class की Sub Classes के Objects को Refer कर सके।
चूंकि हमने जो Figure Program बनाया था, उसमें भी Super Class के Object Create करने का कोई Meaning नहीं है। इसलिए हम उस पूरे Program को Abstract Class के रूप में निम्नानुसार Modify कर सकते हैं:
// Program // File Name: AbstractClass.java abstract class Figure { double dim1, dim2; Figure(double dimension1, double dimension2) { dim1 = dimension1; dim2 = dimension2; } abstract double area(); } class Rectangle extends Figure { Rectangle(double dimension1, double dimension2) { super(dimension1, dimension2); } double area() // Implementing of Super Class’s Abstract Method { System.out.println("\nInside Area for Rectangle : "); return dim1 * dim2; } } class Triangle extends Figure { Triangle(double dimension1, double dimension2) { super(dimension1, dimension2); } double area() // Implementing of Super Class’s Abstract Method { System.out.println("\nInside Area for Triangle : "); return dim1 * dim2 / 2; } } class AbstractClass { public static void main(String args[]) { // Figure newFigure = new Figure(10,10); // Object Created Rectangle newRectangle = new Rectangle(6,7); // Object Created Triangle newTriangle = new Triangle(12,23); // Object Created Figure referenceFigure; // Reference Created referenceFigure = newRectangle; System.out.println("Area is " + referenceFigure.area()); referenceFigure = newTriangle; System.out.println("Area is " + referenceFigure.area()); // referenceFigure = newFigure; // System.out.println("Area is " + referenceFigure.area()); } } // Output Inside Area for Rectangle : Area is 42.0 Inside Area for Triangle : Area is 138.0
जावा में किसी भी Class के Object में हमेंशा किसी ना किसी Actual Memory Block का Reference Store होता है। इसका मतलब ये होता है कि जावा में किसी भी Class का Object स्वयं किसी Memory Block का नाम नहीं होता है, बल्कि किसी Memory Block के Address का Reference इस Object में Hold होता है। यानी जावा में तब तक कोई Actual Object Create नहीं होता है, जब तक कि हम new Operator का प्रयोग करके Object Create ना करें।
जब हम new Operator द्वारा कोई Memory Block Create करते हैं, तब Created Memory Block का Reference ही उस Class के Object में Store होता है। जबकि Abstract Classes ऐसी Classes हैं, जिनके Object Create नहीं किए जा सकते हैं, लेकिन Reference तो Abstract Classes के भी Create किए जा सकते हैं और इस Program में हमने Figure नाम की Abstract Class का Reference ही main() Method में Create किया है। इसलिए ये Program पूरी तरह से काम करता है और हमें उचित Output देता है।
इस Program में हमने कुछ Lines को Comment बनाया है। यदि हम Program की पहली Line को Normal कर दें, तो ये Line Figure Class का Object Create करेगा, जो कि सम्भव नहीं है। इसलिए Error Generate होगा, और चूंकि Figure Class का Object Create नहीं हो सकता है, इसी वजह से हम Figure Class के किसी Object के लिए किसी भी Method को Call नहीं कर सकते हैं। इसीलिए Program की अन्तिम दो Lines के Code को भी Comment बनाया है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Java Programming Language in Hindi | Page: 682 | Format: PDF