2010-12-01 19 views
16

का ऑब्जेक्ट बनाएं कोई मुझे बता सकता है कि मैं अमूर्त वर्ग और इंटरफ़ेस का ऑब्जेक्ट कैसे बना सकता हूं। मुझे क्या पता है कि हम अनुपस्थित वर्ग और इंटरफेस को इंटानेट नहीं कर सकते हैं।अमूर्त वर्ग और इंटरफ़ेस

धन्यवाद और सादर, गौतम

उत्तर

2

आप एक वर्ग है कि अमूर्त वर्ग से निकला है या इंटरफ़ेस लागू करता है, और फिर उस का दृष्टांत लिखें।

13

आप एक अमूर्त वर्ग या इंटरफेस को तुरंत चालू नहीं कर सकते - आप अपने उप-वर्गों/कार्यान्वयनकर्ताओं में से एक को तत्काल कर सकते हैं।

ऐसी चीजों के उदाहरण जावा संग्रह के उपयोग में विशिष्ट हैं।

List<String> stringList = new ArrayList<String>(); 

आप प्रकार के रूप में इंटरफ़ेस प्रकार List<T> उपयोग कर रहे हैं, लेकिन उदाहरण अपने आप में एक ArrayList<T> है।

1
public abstract class AbstractClass { ... } 

public interface InterfaceClass { ... } 

// This is the concrete class that extends the abstract class above and 
// implements the interface above. You will have to make sure that you implement 
// any abstract methods from the AbstractClass and implement all method definitions 
// from the InterfaceClass 
public class Foo extends AbstractClass implements InterfaceClass { ... } 
3
public abstract class Foo { public abstract void foo(); } 
public interface Bar { public void bar(); } 
public class Winner extends Foo implements Bar { 
    @Override public void foo() { } 
    @Override public void bar() { } 
} 
new Winner(); // OK 
+0

foo() सार कक्षा में विधि कीवर्ड सार की आवश्यकता है instantiating कर रहे हैं अन्यथा यह समय त्रुटि संकलन फेंकता है। यह सार्वजनिक अमूर्त शून्य foo() की तरह होना चाहिए; – user609239

4

आपको गुमनाम वर्ग के रूप में एक कार्यान्वयन प्रदान कर सकते हैं:

new SomeInterface() { 
    public void foo(){ 
     // an implementation of an interface method 
    } 
}; 

इसी तरह, एक गुमनाम वर्ग के बजाय एक अंतरफलक को लागू करने की एक माता पिता के वर्ग का विस्तार कर सकते हैं (लेकिन यह दोनों नहीं कर सकते)।

2

"तत्काल" का अर्थ है "एक वस्तु बनाएं"।

तो आप सीधे एक नहीं बना सकते हैं।

इंटरफेस और अमूर्त कक्षाओं का उद्देश्य कुछ ठोस वर्ग के व्यवहार का वर्णन करना है जो इंटरफ़ेस लागू करता है या सार वर्ग को बढ़ाता है।

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

यदि आप किसी और के कोड का उपयोग कर रहे हैं जो Fooable (जहां वह है कुछ इंटरफेस का नाम), आपको वास्तव में कुछ फूएबल क्लास की वस्तु के लिए नहीं पूछा जा रहा है (क्योंकि वास्तव में ऐसी कक्षा नहीं है)। आपको केवल कुछ वर्ग के उदाहरण के लिए कहा जा रहा है जो फूबल लागू करता है, यानी यह घोषणा करता है कि यह उस इंटरफेस में सभी चीजें कर सकता है। संक्षेप में, कुछ ऐसा जो "फूड किया जा सकता है"।

2

जो आप जानते हैं वह सही है। आप अमूर्त वर्ग या इंटरफ़ेस का ऑब्जेक्ट नहीं बना सकते हैं क्योंकि वे अपूर्ण वर्ग हैं (इंटरफ़ेस को कक्षा के रूप में भी नहीं माना जाता है।)

आप क्या कर सकते हैं अमूर्त वर्ग के उप-वर्ग को लागू करना है, बेशक, यह नहीं होना चाहिए सार। इंटरफ़ेस के लिए, आपको एक कक्षा बनाना होगा जो इंटरफ़ेस को कार्यान्वित करे और इंटरफ़ेस विधियों के निकायों को कार्यान्वित करे।

यहाँ ओरेकल साइट, http://download.oracle.com/javase/tutorial/java/IandI/abstract.html और http://download.oracle.com/javase/tutorial/java/concepts/interface.html

2

आप दो तरह से इस लक्ष्य को हासिल कर सकते हैं पर मूल ट्यूटोरियल हैं।

1) या तो आप एक नई कक्षा में सार कक्षा/इंटरफेस को विस्तार/कार्यान्वित करते हैं, इस नई कक्षा का उद्देश्य बनाते हैं और फिर अपनी आवश्यकता के अनुसार इस वस्तु का उपयोग करते हैं।

2) कंपाइलर आपको अपने कोड में इंटरफेस की अनाम वस्तुओं को बनाने की अनुमति देता है।

उदाहरण के लिए। (नया रननेबल() {...});

उम्मीद है कि इससे मदद मिलती है।

सम्मान, महेंद्र लिआ।

8

एक अमूर्त वर्ग का उद्देश्य सिर्फ का उपयोग बनाने के लिए नई बस, बस एक छोटा सा फर्क के साथ अन्य गैर सार वर्गों की वस्तुओं का निर्माण इस प्रकार की तरह:

package com.my.test; 

public abstract class MyAbstractClass { 
    private String name; 

    public MyAbstractClass(String name) 
    { 
     this.name = name; 
    } 

    public String getName(){ 
     return this.name; 
    } 


} 

package com.my.test; 

public class MyTestClass { 

    public static void main(String [] args) 
    { 
     MyAbstractClass ABC = new MyAbstractClass("name") { 
     }; 

     System.out.println(ABC.getName()); 
    } 

} 

उसी तरह आप एक वस्तु बना सकते हैं में इंटरफ़ेस प्रकार की, बस इस प्रकार है:

package com.my.test; 

public interface MyInterface { 

    void doSome(); 
    public abstract void go(); 

} 

package com.my.test; 

public class MyTestClass { 

    public static void main(String [] args) 
    { 

     MyInterface myInterface = new MyInterface() { 

      @Override 
      public void go() { 
       System.out.println("Go ..."); 

      } 

      @Override 
      public void doSome() { 
       System.out.println("Do ..."); 

      } 
     }; 

     myInterface.doSome(); 
     myInterface.go(); 
    } 

} 
+10

यह अमूर्त वर्ग या इंटरफ़ेस का विषय नहीं है। यह एक अज्ञात वर्ग विस्तार (कार्यान्वयन) कहा जाता है अमूर्त वर्ग (इंटरफ़ेस)। विशाल वैचारिक अंतर। – Deltharis

0

नहीं, हम नहीं वस्तु एक इंटरफेस या सार कक्षा से बाहर बना सकते हैं क्योंकि

ऑब्जेक्ट बनाने का मुख्य उद्देश्य लपेटा गया तरीकों और डेटा का उपयोग करना है। क्योंकि इंटरफ़ेस में कोई ठोस कार्यान्वयन नहीं है इसलिए हम नहीं कर सकते हैं।

अमूर्त वर्ग के लिए हमारे पास ठोस विधि या सार विधि या दोनों हो सकते हैं। एपीआई डेवलपर के पास उस विधि के उपयोग को प्रतिबंधित करने का कोई तरीका नहीं है जिसमें कार्यान्वयन नहीं है।

आशा है कि मदद करें।

+0

आप अज्ञात वर्ग का उपयोग कर इंटरफ़ेस और अमूर्त वर्ग का ऑब्जेक्ट बना सकते हैं यह http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html – Simmant

+0

यह इंटरफ़ेस या अमूर्त वर्ग का ऑब्जेक्ट नहीं है। यह अज्ञात वर्ग का एक उद्देश्य है। – Deltharis

0

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

0

आप अमूर्त वर्ग या एक अंतरफलक का दृष्टांत नहीं कर सकते हैं - आप अपने उपवर्गों/कार्यान्वयन

में से एक का दृष्टांत कर सकते हैं आप नहीं कर सकते एक अमूर्त वर्ग का दृष्टांत या एक अंतरफलक आप केवल अपने व्युत्पन्न वर्ग में से एक का दृष्टांत कर सकते हैं।

अपने उदाहरण

MyAbstractClass ABC = new MyAbstractClass("name") { 
    }; 

बीच आप किसी भी वर्ग को लागू करने वाली आश्चर्य की बात

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