2010-10-22 16 views
26
interface TestA { 
    String toString(); 
} 

public class Test { 
    public static void main(String[] args) { 
     System.out.println(new TestA() { 
      public String toString() { 
       return "test"; 
      } 
     }); 
    } 
} 

परिणाम क्या है?क्या हम एक इंटरफ़ेस का ऑब्जेक्ट बना सकते हैं?

ए परीक्षण
बी अशक्त
सी एक अपवाद कार्यावधि में फेंक दिया है।
डी संकलन लाइन में किसी त्रुटि के कारण विफल रहता है 1.
ई संकलन लाइन में किसी त्रुटि के कारण विफल रहता है 4.
एफ संकलन लाइन 5.

में कोई त्रुटि क्या जवाब है के कारण विफल रहता इस सवाल का और क्यों? मेरे पास इस प्रश्न के बारे में एक और सवाल है। लाइन 4 में हम ए का ऑब्जेक्ट बना रहे हैं क्या इंटरफ़ेस का ऑब्जेक्ट बनाना संभव है?

+11

परीक्षण सवाल की तरह लग रहा। बीटीडब्ल्यू, आप कोशिश क्यों नहीं करते? – Kel

+7

जो उत्तर आप इसे चलाकर प्राप्त करेंगे। – Bozho

+4

@ केल: हो सकता है कि वह एक स्पष्टीकरण चाहता है कि यह क्यों काम करता है? –

उत्तर

5

test आउटपुट होना चाहिए। यह एक अज्ञात आंतरिक वर्ग का एक उदाहरण है।

यह एक बहुत आम पैटर्न है जो Comparator इंटरफ़ेस के साथ बंद होने के अनुकरण के रूप में उपयोग किया जाता है।

निम्नलिखित इंटरफेस को देखते हुए:

interface Inter { 
    public String getString(); 
} 

तुम इतनी है कि यह का एक उदाहरण की तरह कुछ बना सकते हैं:

76

क्या आप यहाँ देख रहे हैं एक anonymous inner class है अब

Inter instance = new Inter() { 
    @Override 
    public String getString() { 
     return "HI"; 
    } 
    }; 

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

+2

मैं इसे ढूंढ रहा था। यह वास्तव में एक छोटा सा और सरल जवाब है। इसकी सादगी के लिए +1। – amod

+0

मुझे आश्चर्य है कि इसे उत्तर के रूप में क्यों स्वीकार नहीं किया जाता है। –

+1

सरल और सही उत्तर, बहुत बहुत धन्यवाद – smoothumut

1

यह चाल बिल्कुल बेनामी आंतरिक वर्ग के बारे में नहीं है, यह प्रिंट परीक्षण टेस्ट स्ट्रिंग विधि को ओवरराइड करता है और System.out.println ऑब्जेक्ट को निहित करता है, यह कॉल करने के लिए यह स्ट्रिंग विधि है।

1

इसे भी आजमाएं ... बेनामी वर्ग का नाम जेनरेट किया गया है!

Inter instance = new Inter() { 
    public String getString(){ return "HI"+this.getClass(); } 
}; 
-1

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

यहाँ आप लिख कर एक वर्ग और विरासत को लागू करने instantiating रहे

System.out.println(new TestA() { 
    public String toString() { 
     return “test”; 
    } 
}); 

और बिल्कुल परिणाम होगा test

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