मैं अमूर्त वर्ग अवधारणा के बारे में उलझन में हूँ। कृपया मेरी शंका को दूर करें। 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 एक वस्तु है या क्या है?

2
maddy d 30 नवम्बर 2015, 11:10

3 जवाब

सबसे बढ़िया उत्तर

test एक गुमनाम ठोस उप-वर्ग AbstractTest (ध्यान दें कि यह AbstractTest के सभी अमूर्त तरीकों को लागू करता है) का एक उद्देश्य है, यही वजह है कि इस उप-वर्ग को तत्काल बनाया जा सकता है।

दूसरी ओर,

AbstractTest test = new AbstractTest();

संकलन पास नहीं होगा, क्योंकि यह एक अमूर्त वर्ग को त्वरित करने का प्रयास होगा।

5
Eran 30 नवम्बर 2015, 08:12

आप वस्तु और संदर्भ को मिला रहे हैं।

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
3
Community 2 सितंबर 2020, 08:34

मेरी राय में सार वर्ग को इंटरफेस के साथ मिलकर समझाया जाना चाहिए।

इंटरफ़ेस आपको उन कार्यों को निर्दिष्ट करने की अनुमति देता है जो उस इंटरफ़ेस के साथ वस्तुओं पर समर्थित / अनुमत हैं। अधिक विशेष रूप से ऑब्जेक्ट एक वर्ग के उदाहरण हैं जो इंटरफ़ेस को लागू करता है। एक इंटरफ़ेस को परिभाषित करना आपको वस्तुओं के विभिन्न वर्गों के एक समूह का वर्णन करने की अनुमति देता है ताकि अन्य वस्तुएं उसी तरह से उनके साथ बातचीत कर सकें।

सार वर्ग इंटरफ़ेस और एक कक्षा (शिथिल बोलने) के बीच एक कदम है। अमूर्त वर्ग आपको उन संचालन को निर्दिष्ट करने की अनुमति देता है जो इसे विस्तारित करने वाली कक्षाओं द्वारा समर्थित हैं, लेकिन यह आपको उन कार्यों को लागू करने (कुछ) को लागू करने की भी अनुमति देता है। इस तरह आप उस अमूर्त वर्ग में कक्षाओं के समूह के लिए सामान्य तरीके लागू कर सकते हैं। अमूर्त वर्ग के अन्य तरीकों को लागू नहीं किया जाता है (उर्फ अमूर्त तरीके) उस वर्ग द्वारा लागू किए जाने की आवश्यकता है जो इसे बढ़ाता है। तथ्य यह है कि आप एक सार वर्ग पर सभी तरीकों को लागू नहीं किया स्वाभाविक रूप से इसका मतलब है कि आप इसे तुरंत नहीं कर सकते (ऐसी कक्षा का एक ऑब्जेक्ट बनाएं)। एब्सट्रैक्ट क्लासेज (यानी कॉलबैक) के लिए अन्य उपयोगी कार्यान्वयन हैं।

आपके उदाहरण में आप जो देख रहे हैं, वह यह है कि आप वास्तव में केवल एक ऑब्जेक्ट बनाने की कोशिश नहीं कर रहे हैं कि सार वर्ग आप ऑनक्लिक () के अमूर्त विधि के कार्यान्वयन प्रदान कर रहे हैं;

यही एकमात्र तरीका है जिससे आप "अमूर्त वर्ग का एक उदाहरण बना सकते हैं" - तकनीकी रूप से आप एक अनाम वर्ग (जो आपके अमूर्त वर्ग का विस्तार कर रहे हैं) का एक उदाहरण बना रहे हैं जिसके लिए आप विरासत में मिली अमूर्त विधियों को लागू करते हैं।

0
Milan 30 नवम्बर 2015, 09:10