2010-12-14 21 views
18

संभावित डुप्लिकेट:
Abstract class and Interface class?
Java: interface/abstract classes/abstract methodजावा में इंटरफ़ेस का वास्तविक उपयोग क्या है?

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

+1

विभिन्न प्रश्नों में, इस सवाल से कई बार पहले पूछा गया है। –

+0

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

उत्तर

23

आप क्या पसंद: सार तरीकों के हजारों एक सार कक्षा में और इस वर्ग के वारिस या विशिष्ट सार तरीकों के लिए के रूप में कई इंटरफेस बनाने के लिए और रूप में की जरूरत के रूप में कई इंटरफेस इनहेरिट द्वारा उपयोग उन केवल आप चाहते हैं ...

abstract class A 
{ 
//thousands of abstract method(); 
abstract methodA(); 
abstract methodB(); 
abstract methodC(); 
} 

//OR 
interface ForOnlymethodA 
{ 
void methodA(); 
} 
interface FormethodBandmethodC 
{ 
void methodB(); 
void methodC(); 
} 

तो, यदि आप Abstract कक्षाएं प्राप्त कर रहे हैं तो केवल उस विधि का उपयोग करें, यदि आप Abstract कक्षाएं प्राप्त कर रहे हैं तो आप अनावश्यक रूप से सभी विधियों को विरासत में प्राप्त कर रहे हैं जिनकी आपको एक कक्षा में आवश्यकता नहीं है और कुछ अन्य वर्गों में इसकी आवश्यकता हो सकती है ..

7

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

यह वास्तव में आपकी आवश्यकता पर निर्भर करता है। सी ++ आपको अपनी इच्छित कक्षाओं को विस्तारित करने की अनुमति देता है, और यह एक आपदा में बदल जाता है। केवल एक सुपरक्लास होने के बारे में अच्छी बात यह है कि केवल एक ही अन्य कार्यान्वयन है जो आपको चिंता करने की ज़रूरत है (भले ही माता-पिता के माता-पिता हों, माता-पिता का विशेष संयोजन आपके माता-पिता बन जाता है ...)

इंटरफेस अनुमति एक वस्तु कई भूमिकाओं को चलाने के लिए, लेकिन वे कोड पुन: उपयोग की अनुमति नहीं देते हैं।

विरासत के बारे में सोच को सरल बनाना वास्तव में है। संतुलन पर, मुझे लगता है कि उन्हें यह सही मिला।

+0

धन्यवाद। – kandarp

1

इंटरफेस जावा में परपर काम करने की अनुमति देता है।

यह कक्षा पदानुक्रम और "बंद प्रकारों" पर "सिंगल inheritance" सीमा के कारण है। मैं अपनी जीभ subtype polymorphism पर रखूंगा और जावा का कार्यान्वयन ;-)

गतिशील टाइपिंग, संरचनात्मक टाइपिंग, एकाधिक विरासत, और लक्षण आदि जैसे इस समस्या के अन्य समाधान हैं। प्रत्येक दृष्टिकोण के फायदे और अक्षमताएं हैं । अंतरफलक सिर्फ जावा थे जो जावा ने लिया था।

+0

मेरे पोस्ट – kandarp

0

जावा इंटरफ़ेस - data encapsulation प्रदान करता है जिसका अर्थ है, विधियों का कार्यान्वयन नहीं देखा जा सकता है। इस इंटरफेस को विस्तारित करने वाली कक्षा को इसमें घोषित सभी विधियों को लागू करना होगा।

अधिक जानकारी: एक अमूर्त वर्ग से अधिक wiki answer

0

लाभ? इस तथ्य को छोड़कर आप कई इंटरफेस को कार्यान्वित कर सकते हैं, लेकिन केवल एक (सार या नहीं) वर्ग का विस्तार कर सकते हैं, यह एक सार वर्ग के समान है कि इसकी सभी विधियां अमूर्त और सार्वजनिक हैं

51

इंटरफेस आपको विभिन्न पदानुक्रमों में कक्षाओं का उपयोग करने की अनुमति देता है, polymorphically

उदाहरण के लिए, आप निम्नलिखित इंटरफेस है कहते हैं:

public interface Movable { 
    void move(); 
} 

वर्गों की कोई भी संख्या, वर्ग पदानुक्रम अभी भी अपने विशिष्ट तरीके से Movable को लागू कर सकता है, अभी तक भर में एक वर्दी में कुछ फोन करने वाले द्वारा इस्तेमाल किया जा मार्ग।

तो अगर आप निम्नलिखित दो वर्गों है: फोन करने वाले के दृष्टिकोण से

public class Car extends Vehicle implements Movable { 
    public void move() { 
     //implement move, vroom, vroom! 
    } 
} 

public class Horse extends Animal implements Movable { 
    public void move() { 
     //implement move, neigh! 
    } 
} 

, यह सिर्फ एक Movable

Movable movable = ...; 
movable.move(); //who am I? 

मुझे आशा है कि इस मदद करता है है।

+1

का जवाब देने के लिए धन्यवाद, उदाहरण के लिए इंटरफ़ेस और सार के बीच अंतर को समझने में मेरी सहायता करने के लिए धन्यवाद। – kandarp

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