2013-07-01 13 views
8

क्या इंटरफ़ेस के लिए ऑब्जेक्ट बनाना संभव है, यदि हां हम कैसे कर सकते हैं? मेरे विचार के अनुसार निम्नलिखित कोड का कहना है कि हम कर सकते हैं:क्या मैं इंटरफ़ेस के लिए ऑब्जेक्ट बना सकता हूं?

Runnable r= new Runnable(){ // some implementation }

+0

नहीं, आप नहीं कर सकते। साथ ही, सभी वर्ग ऑब्जेक्ट से प्राप्त होते हैं, जबकि इंटरफ़ेस – Ankit

+0

नहीं है क्या आपने इसे आजमाया है? आपके उदाहरण में, आप एक अज्ञात वर्ग का उदाहरण बनाते हैं जो इंटरफ़ेस लागू करता है। – Axel

+0

संबंधित अवधारणा: https://stackoverflow.com/questions/33994009/can-we-create-object-of-abstract-class –

उत्तर

11

आप एक इंटरफेस सीधे दृष्टांत नहीं कर सकते हैं, लेकिन आप एक वर्ग है कि इंटरफ़ेस को लागू करता है का दृष्टांत कर सकते हैं:

public class RunClass implements Runnable { 
    // Class implementation 
} 

Runnable r = new RunClass(); 

यह मूल रूप से वही है जो आप इनलाइन कर रहे हैं। नए रननेबल() के बाद ब्रैकेट में आपका कार्यान्वयन इनलाइन होगा।

+5

यह थोड़ा भ्रामक है। ओपी का सवाल अज्ञात वर्ग वाक्यविन्यास का उपयोग करता है, जो शायद बिंदु है। –

14

यह इंटरफ़ेस का उदाहरण नहीं बना रहा है, यह एक कक्षा बना रहा है जो इंटरफ़ेस लागू करता है। तो जब आप

Runnable runnable = new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 

     } 
    }; 

आप वास्तव में एक कक्षा बना रहे हैं जो रननेबल इंटरफ़ेस को कार्यान्वित कर रहा है। आप यहाँ सभी नियमों का पालन करने की आवश्यकता यहाँ, हम Runnable

There is similar thing for abstract class also. We can test using an example 

public abstract class AbstractClass { 

    public void someMethod(){ 
     System.out.println("abstract class"); 
    } 

} 

और एक अन्य वर्ग यानी TestClass

public class TestClass { 

    public static void main(String[] args) { 

     AbstractClass abstractClass = new AbstractClass() { 
      public void someMethod() { 
       System.out.println("concrete class method"); 
      } 
     }; 
     abstractClass.someMethod(); 
    } 
} 

यह एक उपवर्ग, जिसमें हम कर रहे हैं के उदाहरण पैदा करेगा के लिए रन विधि अधिभावी कर रहे हैं ओवरराइडिंग someMethod(); इस कार्यक्रम के प्रिंट

concrete class method 

यह साबित होता है कि हम उपवर्ग के कहने बना रहे हैं।

+0

धन्यवाद यह अच्छा Answar –

6

क्या इंटरफ़ेस के लिए ऑब्जेक्ट बनाना संभव है?

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


"गुमनाम" वर्ग उत्पन्न वास्तव में एक नाम, इस कोड को प्रकट होता है, जिसमें, उदाहरण के YourClass$1 या इसी तरह के लिए वर्ग के नाम के आधार पर होगा। उदाहरण के लिए:

public class AnonymousName { 
    public static final void main(String[] args) { 
     Runnable r = new Runnable() { 
      public void run() { 
      } 
     }; 

     System.out.println(r.getClass().getName()); 
    } 
} 

... आउटपुट

AnonymousName$1

;

(कम से कम Oracle की JVM पर अगर नामकरण परंपरा JLS में है या अगर यह JVM-विशिष्ट व्यवहार है मैं नहीं जानता।)
0

हम इंटरफ़ेस को इंस्टाल नहीं कर सकते हैं (क्योंकि कन्स्ट्रक्टर नहीं है)।

+0

है मुझे राय नहीं लगता है। हो सकता है कि आप उसकी समस्या का समाधान कर सकें। यह मेरे लिए पूरा जवाब दिखता है। –

+1

आपका उत्तर सही है। मुझे लगता है कि उपयुक्त जगह टिप्पणी है और जवाब नहीं है। –

8

आपको गुमनाम आंतरिक वर्ग बना सकते हैं:

Runnable r = new Runnable() { 
    @Override 
    public void run() { 
    } 
}; 

इसलिए आप एक नया class जो दिया interface लागू करता है बनाएँ।

0

जो आप देख रहे हैं वह anonymous inner class है।

यह रननेबल क्लास के नए, अज्ञात, कार्यान्वयन का उदाहरण बना रहा है।

क्योंकि अज्ञात वर्ग परिभाषा एक अभिव्यक्ति है, यह एक बयान का हिस्सा होना चाहिए।

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