2013-06-02 29 views
7

कैसे इस कोड काम मैं पूरी तरह हैरान हूँ है ....हम जावा में इंटरफ़ेस का ऑब्जेक्ट कैसे बना सकते हैं?

package com.servletpack.examples; 

interface check { 
    public void message(); 
} 
public class Interface { 
    public static void main(String[] args) { 
     try { 
      check t = new check() {//how???????????????? 
       public void message() { 
        System.out.println("Method defined in the interface"); 
       } 
      }; 
      t.message(); 
     } catch (Exception ex) { 
      System.out.println("" + ex.getMessage()); 
     } 
    } 
} 
+2

क्या आपने [googling] (https://www.google.co.il/search?q=How+can+we+create+object+of+interface+in+java%3F&rlz=1C1CHEU_iwIL474IL474&oq=How+ + + + + + + +% + एफ + aqs = chrome.0.57j60l2j0l3.802j0 और स्रोत आईडी = क्रोम और यानी = यूटीएफ -8) + + + + + ऑब्जेक्ट + + इंटरफ़ेस + बना सकते हैं। – BobTheBuilder

+0

क्या आपने चीजों को Google करने और जावा बुनियादी सिद्धांतों को देखने का प्रयास किया था? इस लिंक पर रेफर करें http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html –

उत्तर

18

उस वाक्यविन्यास के साथ, आप anonymous class बनाते हैं, जो पूरी तरह से कानूनी है।

आंतरिक रूप से, अज्ञात वर्गों को अपनी खुद की कक्षा में संकलित किया जाता है, जिसे EnclosingClass$n कहा जाता है जहां संलग्न वर्ग का नाम $ चिह्न से पहले होता है। और प्रत्येक अतिरिक्त अज्ञात वर्ग के लिए n बढ़ता है। इसका मतलब है कि निम्नलिखित वर्ग बनाया जा रहा है:

check t = new Interface$1(); 
t.message(); 
+0

क्या होगा अगर इंटरफ़ेस $ 1 एक अमूर्त वर्ग है? –

+1

@ रामकृष्ण बेनामी वर्ग अमूर्त नहीं हो सकते हैं। यदि इंटरफेस 'चेक' इसके बजाय एक अमूर्त वर्ग था, तो इसका अनाम कार्यान्वयन समान रूप से' इंटरफ़ेस $ 1' नाम दिया जाएगा। – Vulcan

5

आप anonymous class का एक उदाहरण (मक्खी पर) है कि इंटरफेस की जांच को लागू करता है बना रहे हैं।

2

आपका इंटरफेस संदर्भ की वस्तु पकड़ कर सकते हैं:

class Interface$1 implements check { 
    public void message() { 
     System.out.println("Method defined in the interface"); 
    } 
} 

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

2

यह अज्ञात वर्ग है। आपका चेक कक्षा एक इंटरफ़ेस है। बेनामी वर्ग फ्लाई पर दिए गए इंटरफ़ेस के कार्यान्वयन को परिभाषित करता है। तो यह आपको इंटरफेस के कार्यान्वयन के लिए एक अलग वर्ग बनाने से बचाता है। यह दृष्टिकोण केवल तब उपयोगी होता है जब आप जानते हैं कि आपको कोड में कहीं और इस कार्यान्वयन की आवश्यकता नहीं होगी।

आशा है कि यह स्पष्टीकरण मदद करता है !!

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