मैं अमूर्त वर्ग अवधारणा के बारे में उलझन में हूँ। कृपया मेरी शंका को दूर करें। Abstract
वर्ग की परिभाषा में कहा गया है कि हम ऐसी कक्षा की वस्तु नहीं बना सकते हैं, फिर जिसे हम A a = new A() { }
कहते हैं। उदाहरण नीचे है:
public abstract class AbstractTest {
public abstract void onClick();
public void testClick() {
}
}
public class A {
AbstractTest test = new AbstractTest() {
@Override
public void onClick() {
}
};
}
फिर test
एक वस्तु है या क्या है?
3 जवाब
test
एक गुमनाम ठोस उप-वर्ग AbstractTest
(ध्यान दें कि यह AbstractTest
के सभी अमूर्त तरीकों को लागू करता है) का एक उद्देश्य है, यही वजह है कि इस उप-वर्ग को तत्काल बनाया जा सकता है।
दूसरी ओर,
AbstractTest test = new AbstractTest();
संकलन पास नहीं होगा, क्योंकि यह एक अमूर्त वर्ग को त्वरित करने का प्रयास होगा।
आप वस्तु और संदर्भ को मिला रहे हैं।
AbstractTest test = new AbstractTest() {
@Override
public void onClick() {
}
};
test
यहां एक अनाम वर्ग का संदर्भ दिया गया है जो AbstractTest
तक फैला है, उपरोक्त कोड यह कहने जैसा है:
class MyClass extends AbstractTest {
@Override
public void onClick() {
}
}
AbstractTest test = new MyClass(); // test is a reference to a MyClass object
मेरी राय में सार वर्ग को इंटरफेस के साथ मिलकर समझाया जाना चाहिए।
इंटरफ़ेस आपको उन कार्यों को निर्दिष्ट करने की अनुमति देता है जो उस इंटरफ़ेस के साथ वस्तुओं पर समर्थित / अनुमत हैं। अधिक विशेष रूप से ऑब्जेक्ट एक वर्ग के उदाहरण हैं जो इंटरफ़ेस को लागू करता है। एक इंटरफ़ेस को परिभाषित करना आपको वस्तुओं के विभिन्न वर्गों के एक समूह का वर्णन करने की अनुमति देता है ताकि अन्य वस्तुएं उसी तरह से उनके साथ बातचीत कर सकें।
सार वर्ग इंटरफ़ेस और एक कक्षा (शिथिल बोलने) के बीच एक कदम है। अमूर्त वर्ग आपको उन संचालन को निर्दिष्ट करने की अनुमति देता है जो इसे विस्तारित करने वाली कक्षाओं द्वारा समर्थित हैं, लेकिन यह आपको उन कार्यों को लागू करने (कुछ) को लागू करने की भी अनुमति देता है। इस तरह आप उस अमूर्त वर्ग में कक्षाओं के समूह के लिए सामान्य तरीके लागू कर सकते हैं। अमूर्त वर्ग के अन्य तरीकों को लागू नहीं किया जाता है (उर्फ अमूर्त तरीके) उस वर्ग द्वारा लागू किए जाने की आवश्यकता है जो इसे बढ़ाता है। तथ्य यह है कि आप एक सार वर्ग पर सभी तरीकों को लागू नहीं किया स्वाभाविक रूप से इसका मतलब है कि आप इसे तुरंत नहीं कर सकते (ऐसी कक्षा का एक ऑब्जेक्ट बनाएं)। एब्सट्रैक्ट क्लासेज (यानी कॉलबैक) के लिए अन्य उपयोगी कार्यान्वयन हैं।
आपके उदाहरण में आप जो देख रहे हैं, वह यह है कि आप वास्तव में केवल एक ऑब्जेक्ट बनाने की कोशिश नहीं कर रहे हैं कि सार वर्ग आप ऑनक्लिक () के अमूर्त विधि के कार्यान्वयन प्रदान कर रहे हैं;
यही एकमात्र तरीका है जिससे आप "अमूर्त वर्ग का एक उदाहरण बना सकते हैं" - तकनीकी रूप से आप एक अनाम वर्ग (जो आपके अमूर्त वर्ग का विस्तार कर रहे हैं) का एक उदाहरण बना रहे हैं जिसके लिए आप विरासत में मिली अमूर्त विधियों को लागू करते हैं।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।