2015-09-02 12 views
16
abstract class A { 
    public void disp() { 
     System.out.print("Abstract"); 
    } 
} 

public class B { 
    public static void main(String args[]) { 
     A object = new A(){ }; 
     object.disp(); 
    } 
} 

मुझे पता है कि सार कक्षाओं को तत्काल नहीं किया जा सकता है, लेकिन इस कोड पर उलझन में है। असल में इस कोड का क्या अर्थ है?क्या एक अमूर्त वर्ग को तत्काल किया जा सकता है?

+0

यह मुझे परेशान करता है कि यह स्पष्ट रूप से डुप्लिकेट प्रश्न * 13 * अपवॉट एकत्र हुए। – Raedwald

उत्तर

30

यहां सूक्ष्मता "{}" में है। इसका मतलब है कि स्पष्ट रूप से अमूर्त वर्ग A के लापता हिस्सों (अनुपलब्ध भागों अमूर्त विधियों) के लिए अज्ञात कार्यान्वयन प्रदान करता है ताकि आप इसे तुरंत चालू कर सकें।

लेकिन A में कोई सार विधि नहीं है, इसलिए अनाम कार्यान्वयन खाली है।

कम से कम एक सार विधि के साथ व्यवहार दिखा उदाहरण:

public abstract class A { 
    public abstract void bar(); 
    public void disp() { System.out.print("Abstract"); } 
} 

public class B { 
    public static void main(String args[]) { 
     A object = new A() { 
      @Override public void bar() { System.out.print("bar"); } 
     }; 
     object.disp(); //prints "Abstract" 
     object.bar(); //prints "bar" 
    } 
} 
+0

मैं यह तय नहीं कर सकता कि यह "कूल" चीज है या नहीं, जावा ने सी # नहीं किया है; जावा के लिए एक कामकाज के लिए मूल रूप से प्रतिनिधि और घटनाएं नहीं हैं। –

+0

कक्षा ए को सार के रूप में घोषित करने का कोई कारण है, भले ही आपके पास कोई सार तत्व नहीं है (जैसा कि ओपी प्रश्न के उदाहरण में)? क्लास ए – Brandin

+0

@ ब्रैंडिन की घोषणा से "अमूर्त" क्वालीफायर को क्यों न हटाएं - शायद आप कुछ गैर-अमूर्त तरीकों के साथ बेस क्लास चाहते हैं जिन्हें कभी भी तत्काल नहीं किया जाना चाहिए? जैसे, 'आकार' वर्ग, जिसे 'त्रिभुज', 'स्क्वायर' द्वारा विरासत में मिलाया जाता है, और इसमें एक साझा विधि 'getLocation()' है, लेकिन आप कभी भी किसी को 'आकार' का उदाहरण नहीं देना चाहते हैं । यह केवल विरासत के लिए मौजूद है। – Davor

14

यह एक गुमनाम आंतरिक वर्ग कहा जाता है। आप अमूर्त वर्ग को तत्काल नहीं कर रहे हैं, आप कंक्रीट अज्ञात आंतरिक वर्ग को तत्काल कक्षा में विस्तारित कर रहे हैं। बेशक, इस अनुमति के लिए, अज्ञात आंतरिक वर्ग को अमूर्त सुपरक्लास के सभी अमूर्त सदस्यों के लिए कार्यान्वयन प्रदान करना होगा ... जो इस मामले में करता है, क्योंकि अमूर्त सुपरक्लास के पास कोई सार सदस्य नहीं हैं।

संबंधित मुद्दे