2010-10-16 10 views
9
interface Int { 
    public void show(); 
} 

public class Test {  
    public static void main(String[] args) { 
     Int t1 = new Int() { 
      public void show() { 
       System.out.println("message"); 
      } 
     }; 

     t1.show(); 
    } 
} 

उत्तर

16

आप एक अज्ञात वर्ग को परिभाषित कर रहे हैं जो इंटरफेस Int लागू करता है, और तुरंत thatAnonymousClassYouJustMade प्रकार का ऑब्जेक्ट बना रहा है।

+2

यह ईवेंट हैंडलर (जैसे कि एक्शनलिस्टर इंटरफ़ेस का उपयोग करने वाले) के लिए वास्तव में उपयोगी है। –

4

गुड के अंतर्गत अज्ञात आंतरिक कक्षाओं के लिए यह विशेष वाक्यविन्यास Test$1 नामक कक्षा बना रहा है। आप टेस्ट क्लास के बगल में अपने क्लास फ़ोल्डर में उस क्लास फ़ाइल को पा सकते हैं, और यदि आपने t1.getClass().getName() मुद्रित किया है तो आप इसे भी देख सकते हैं।

7

इस टिप्पणी के लिए

Int t1 = new MyIntClass(); 

// Plus this class declaration added to class Test 
private static class MyIntClass implements Int 
    public void show() { 
     System.out.println("message"); 
    } 
} 

आशुलिपि तो अंत में आप एक ठोस वर्ग, जिसका व्यवहार आप इनलाइन परिभाषित का एक उदाहरण बना रहे है।

आप सभी अमूर्त तरीकों के लिए कार्यान्वयन प्रदान करके, अमूर्त कक्षाओं के साथ भी ऐसा कर सकते हैं।

0

मुझे लगता है कि आपके ऑब्जेक्ट के पास इंटरफ़ेस से कुछ लेना देना नहीं है। यदि आप पूरे इंटरफ़ेस पर टिप्पणी करते हैं, तो भी आपको एक ही आउटपुट मिल जाएगा। इसकी सिर्फ अज्ञात वर्ग बनाई गई। मुझे लगता है, जब तक आप कक्षा "उपकरण" का उपयोग नहीं करते हैं, तो आप इंटरफ़ेस को लागू नहीं कर सकते हैं। लेकिन मुझे पता नहीं है कि आपके मामले में टकराव का नाम कैसे नहीं होता है।

+0

अज्ञात वर्ग निश्चित रूप से इंटरफ़ेस लागू करता है, और 'टी 1 उदाहरण' Int 'सत्य होगा। – Thilo

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