"हॅलो, अमिगो! आमच्याकडे एक आकर्षक नवीन विषय आहे."

"आज फक्त आकर्षक विषयांचा दिवस आहे!"

"का, धन्यवाद!"

"तुमचे स्वागत आहे."

" आम्ही बुद्धिबळाच्या तुकड्यांसाठी सर्व वर्ग सुलभ करण्यासाठी ChessItem बेस क्लास कधी सुरू केला ते आठवते?"

"हो."

"आता कल्पना करा की प्रत्येक तुकड्याची एक पद्धत आहे जी स्क्रीनवर तुकडा रेंडरिंग हाताळते. तुम्ही मेथडला कॉल करा आणि तुकडा स्वतःच्या वर्तमान निर्देशांकांवर काढतो. ही पद्धत बेस क्लासमध्ये हलवणे उपयुक्त ठरेल का?"

"हो." मी पॉलिमॉर्फिझमबद्दल शिकल्यानंतर, मी सर्व तुकड्यांसाठी रेंडर पद्धत कॉल करू शकेन, त्यांचा प्रकार काहीही असो. यासारखेच काहीसे:"

उदाहरणार्थ:
class ChessBoard
{
  public void drawAllChessItems()
  {
  //draw them regardless of their type.
  ArrayList <ChessItem> items = new ArrayList<ChessItem>();
  items.add(new King());
  items.add(new Queen());
  items.add(new Bishop());

  //draw them regardless of their type.
  for (ChessItem item: items)
  {
   item.draw();
  }
 }
}

"चांगले. अगदी बरोबर. आणि खुद्द चेसआयटम क्लासच्या ड्रॉ पद्धतीने काय होणार?"

"मला माहित नाही. बुद्धिबळात असा तुकडा नाही. आणि याचा अर्थ असा की त्यात कोणतेही दृश्य प्रतिनिधित्व नाही."

"तंतोतंत. आणि ChessItem ऑब्जेक्ट तयार करण्यात काही अर्थ नाही. असा कोणताही बुद्धिबळाचा तुकडा नाही. तो फक्त एक अमूर्तता आहे —एक वर्ग जो आम्ही सोयीसाठी बनवला आहे. OOP मध्ये अ‍ॅब्स्ट्रॅक्शन कसे कार्य करते: आम्ही सर्व महत्त्वाचे (शेअर केलेले) हलवले सर्व तुकड्यांद्वारे) बेस क्लासमध्ये डेटा आणि पद्धती , परंतु आम्ही विशिष्ट बुद्धिबळाच्या तुकड्यांशी संबंधित वर्गांमध्ये त्यांचे फरक ठेवले."

Java मध्ये यासाठी एक विशेष वर्ग प्रकार आहे: अमूर्त वर्ग . अमूर्त वर्गांबद्दल लक्षात ठेवण्यासारख्या तीन गोष्टी येथे आहेत.

1) एक अमूर्त वर्ग पद्धती लागू केल्याशिवाय घोषित करू शकतो. अशा पद्धतीला अमूर्त पद्धत म्हणतात.

उदाहरणार्थ:
public abstract class ChessItem
{
 public int x, y; //coordinates
 private int value; //the piece's "value"

 public int getValue() //an ordinary method, returns value
 {
   return value;
 }

 public abstract void draw(); //abstract method. There is no implementation.

}

२) अमूर्त पद्धत अ‍ॅबस्ट्रॅक्ट या कीवर्डने चिन्हांकित केली आहे .

जर वर्गात अगदी एक अमूर्त पद्धत असेल, तर वर्ग देखील अमूर्त सह चिन्हांकित केला जातो .

3) तुम्ही अमूर्त वर्गाच्या वस्तू तयार करू शकत नाही. असे करण्याचा प्रयत्न करणारा कोड संकलित होणार नाही.

जावा कोड वर्णन
ChessItem item = new ChessItem();
item.draw();
हा कोड संकलित होणार नाही.
ChessItem item = new Queen();
item.draw();
पण तुम्ही हे करू शकता.

4) जर तुमच्या वर्गाला अमूर्त वर्गाचा वारसा मिळाला असेल, तर तुम्हाला वारशाने मिळालेल्या सर्व अमूर्त पद्धती ओव्हरराइड करणे आवश्यक आहे, म्हणजे तुम्हाला त्या लागू कराव्या लागतील. अन्यथा, तुमचा वर्ग देखील गोषवारा घोषित करावा लागेल. जर वर्गामध्ये थेट घोषित केलेली किंवा पालक वर्गाकडून वारसाहक्क असलेली एकही लागू न केलेली पद्धत असेल, तर वर्ग अमूर्त मानला जातो.

"पण हे सर्व का आवश्यक आहे? आपल्याला अमूर्त वर्गांची गरज का आहे? त्याऐवजी सामान्य वर्ग वापरणे शक्य नाही का? आणि अमूर्त पद्धतींऐवजी, आपण कुरळे कंस उघडणे आणि बंद करणे समाविष्ट असलेली रिक्त अंमलबजावणी तयार करू शकत नाही का?"

"तुम्ही करू शकता. परंतु हे निर्बंध सुधारकासारखे आहेत private. आम्ही privateडेटाचा थेट प्रवेश जाणूनबुजून अवरोधित करण्यासाठी सुधारक वापरतो, जेणेकरून इतर प्रोग्रामर आणि त्यांचे वर्ग आमच्या publicपद्धती वापरतात."

हेच अमूर्त वर्गाला लागू होते. जो कोणी वर्ग लिहिला त्याला कोणीही वर्गाची उदाहरणे तयार करू इच्छित नाहीत. याउलट, लेखकाला त्याच्या किंवा तिच्या अमूर्त वर्गाच्या अमूर्त पद्धती वारशाने मिळाव्यात आणि ओव्हरराइड केल्या जाव्यात अशी अपेक्षा आहे.

"मला अजूनही समजले नाही की आपण आपले जीवन अशा प्रकारे गुंतागुंतीचे का करू इच्छितो."

"या वैशिष्ट्याचा फायदा मोठ्या प्रकल्पांमध्ये दिसून येतो. तुमच्याकडे जितके अधिक वर्ग असतील, तितक्या अधिक स्पष्टपणे तुम्हाला त्यांची भूमिका स्पष्ट करणे आवश्यक आहे. तुम्हाला हे करण्याचा फायदा दिसेल आणि लवकरच. प्रत्येकाला यातून जावे लागेल."