जावा - इंटरफेस

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

अमूर्त विधियों के साथ, एक इंटरफ़ेस में स्थिरांक, डिफ़ॉल्ट विधियाँ, स्थिर विधियाँ और नेस्टेड प्रकार भी हो सकते हैं। विधि निकाय केवल डिफ़ॉल्ट विधियों और स्थिर विधियों के लिए मौजूद हैं।

इंटरफ़ेस लिखना क्लास लिखने के समान है। लेकिन एक वर्ग किसी वस्तु की विशेषताओं और व्यवहारों का वर्णन करता है। और एक इंटरफ़ेस में एक वर्ग लागू होने वाले व्यवहार शामिल हैं।

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

एक इंटरफ़ेस निम्न तरीकों से एक वर्ग के समान है -

  • एक इंटरफ़ेस में किसी भी संख्या में विधियाँ हो सकती हैं।

  • एक इंटरफ़ेस में फ़ाइल के साथ लिखा है a .java फ़ाइल के नाम से मेल खाते इंटरफ़ेस के नाम के साथ विस्तार।

  • इंटरफ़ेस का बाइट कोड एक में दिखाई देता है .class फ़ाइल।

  • पैकेज में इंटरफेस दिखाई देते हैं, और उनकी संबंधित बायोटेक फ़ाइल को एक निर्देशिका संरचना में होना चाहिए जो पैकेज के नाम से मेल खाता है।

हालाँकि, एक इंटरफ़ेस कई मायनों में एक वर्ग से अलग है, जिसमें शामिल हैं -

  • आप एक इंटरफ़ेस को तुरंत नहीं कर सकते।

  • एक इंटरफ़ेस में कोई निर्माता नहीं है।

  • एक इंटरफेस में सभी तरीके अमूर्त हैं।

  • एक इंटरफ़ेस में उदाहरण फ़ील्ड नहीं हो सकते। एकमात्र फ़ील्ड जो एक इंटरफ़ेस में दिखाई दे सकती है उसे स्थैतिक और अंतिम दोनों घोषित किया जाना चाहिए।

  • एक इंटरफ़ेस एक वर्ग द्वारा विस्तारित नहीं है; यह एक वर्ग द्वारा लागू किया जाता है।

  • एक इंटरफ़ेस कई इंटरफेस का विस्तार कर सकता है।

घोषणाओं में कमी

interfaceकीवर्ड का उपयोग इंटरफ़ेस घोषित करने के लिए किया जाता है। यहाँ एक इंटरफ़ेस घोषित करने के लिए एक सरल उदाहरण है -

उदाहरण

निम्नलिखित एक इंटरफ़ेस का एक उदाहरण है -

/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements

public interface NameOfInterface {
   // Any number of final, static fields
   // Any number of abstract method declarations\
}

इंटरफेस में निम्नलिखित गुण हैं -

  • एक इंटरफ़ेस संक्षेप में सार है। आपको उपयोग करने की आवश्यकता नहीं हैabstract इंटरफ़ेस घोषित करते समय कीवर्ड।

  • एक इंटरफ़ेस में प्रत्येक विधि भी संक्षेप में सार है, इसलिए सार कीवर्ड की आवश्यकता नहीं है।

  • एक इंटरफेस में तरीके स्पष्ट रूप से सार्वजनिक हैं।

उदाहरण

/* File name : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

अंतर लागू करना

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

एक वर्ग उपयोग करता है implementsएक इंटरफ़ेस को लागू करने के लिए कीवर्ड। घोषणा के विस्तार के भाग के बाद कक्षा की घोषणा में लागू होने वाला कीवर्ड दिखाई देता है।

उदाहरण

/* File name : MammalInt.java */
public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

यह निम्नलिखित परिणाम का उत्पादन करेगा -

उत्पादन

Mammal eats
Mammal travels

जब इंटरफेस में परिभाषित तरीकों को ओवरराइड करना है, तो कई नियमों का पालन किया जाना है -

  • चेक किए गए अपवादों को इंटरफ़ेस विधि द्वारा घोषित किए गए इंटरफ़ेस विधियों द्वारा घोषित किए गए लोगों के अलावा कार्यान्वयन विधियों पर घोषित नहीं किया जाना चाहिए।

  • इंटरफ़ेस विधि के हस्ताक्षर और उसी रिटर्न प्रकार या उपप्रकार को तरीकों को ओवरराइड करते समय बनाए रखा जाना चाहिए।

  • एक कार्यान्वयन वर्ग ही सार हो सकता है और यदि हां, तो इंटरफ़ेस विधियों को लागू करने की आवश्यकता नहीं है।

जब कार्यान्वयन इंटरफेस, कई नियम हैं -

  • एक वर्ग एक समय में एक से अधिक इंटरफ़ेस लागू कर सकता है।

  • एक वर्ग केवल एक वर्ग का विस्तार कर सकता है, लेकिन कई इंटरफेस लागू कर सकता है।

  • एक इंटरफ़ेस दूसरे इंटरफ़ेस का विस्तार कर सकता है, उसी तरह जैसे एक वर्ग दूसरे वर्ग का विस्तार कर सकता है।

फैली हुई जगह

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

निम्नलिखित स्पोर्ट्स इंटरफ़ेस हॉकी और फुटबॉल इंटरफेस द्वारा विस्तारित है।

उदाहरण

// Filename: Sports.java
public interface Sports {
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}

// Filename: Football.java
public interface Football extends Sports {
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}

// Filename: Hockey.java
public interface Hockey extends Sports {
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

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

कई इंटरफेस का विस्तार

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

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

उदाहरण के लिए, यदि हॉकी इंटरफ़ेस ने स्पोर्ट्स और इवेंट दोनों को बढ़ाया, तो इसे इस प्रकार घोषित किया जाएगा -

उदाहरण

public interface Hockey extends Sports, Event

टैगिंग इंटरफेस

विस्तृत इंटरफ़ेस का सबसे आम उपयोग तब होता है जब मूल इंटरफ़ेस में कोई विधियाँ नहीं होती हैं। उदाहरण के लिए, java.awt.event पैकेज विस्तारित java.util.EventListener में माउस लिस्टनर इंटरफ़ेस, जिसे निम्न के रूप में परिभाषित किया गया है -

उदाहरण

package java.util;
public interface EventListener
{}

इसमें कोई विधि नहीं के साथ एक इंटरफ़ेस एक के रूप में जाना जाता है taggingइंटरफेस। टैगिंग इंटरफेस के दो मूल डिज़ाइन उद्देश्य हैं -

Creates a common parent- EventListener इंटरफ़ेस के साथ, जो कि जावा एपीआई में दर्जनों अन्य इंटरफेस द्वारा बढ़ाया जाता है, आप इंटरफेस के समूह के बीच एक आम अभिभावक बनाने के लिए टैगिंग इंटरफ़ेस का उपयोग कर सकते हैं। उदाहरण के लिए, जब कोई इंटरफ़ेस EventListener का विस्तार करता है, तो JVM जानता है कि इस विशेष इंटरफ़ेस का उपयोग इवेंट प्रतिनिधि परिदृश्य में होने जा रहा है।

Adds a data type to a class- यह स्थिति वह है जहां शब्द, टैगिंग आती है। एक वर्ग जो एक टैगिंग इंटरफ़ेस को लागू करता है, उसे किसी भी तरीके को परिभाषित करने की आवश्यकता नहीं है (क्योंकि इंटरफ़ेस में कोई भी नहीं है), लेकिन वर्ग बहुरूपता के माध्यम से एक इंटरफ़ेस प्रकार बन जाता है।