2009-03-02 18 views
18

कक्षा लिखते समय इंटरफ़ेस का उद्देश्य क्या है?कक्षाओं में इंटरफ़ेस का उद्देश्य

एक उदाहरण है जो मैंने ऑनलाइन देखा है।

<?php 
interface Chargeable { 
    public function getPrice(); 
} 

class Employee implements Chargeable { 
    protected $price; 

    public function getPrice() { 
     return $this->price; 
    } 
} 

$product = new Employee(); 

?> 
+0

देखने के लिए कृपया इस [सवाल] (http://stackoverflow.com/questions/219425/interface-contract- वर्ग-वस्तु)। –

उत्तर

10

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

पर आपका उदाहरण कक्षाओं को दिखाता है जो गारंटी देते हैं कि उनके पास getPrice है विधि उपलब्ध है। फिर आप ऐसे कोड लिख सकते हैं जो ऑब्जेक्ट का लाभ उठाते हैं जिनके पास यह तरीका है कि यह किस प्रकार की कक्षा है, इस बारे में चिंता किए बिना।

0

इंटरफेस आपको इंटरफ़ेस को कार्यान्वयन से अलग करने की अनुमति देता है। यह आसान है जब आप अन्य चीजों के साथ अपने कोड में ऑर्थोगोनलिटी रखना चाहते हैं।

मूल रूप से आप Chargeable स्वीकार करने वाले कार्यों को बनाने में सक्षम होंगे और जब तक यह Chargeable लागू करता है तब तक किसी ऑब्जेक्ट को पास करने में सक्षम हो जाएगा। यदि आपको Employee कक्षा बदलने की आवश्यकता है तो यह आपको सड़क के नीचे लचीला होने की अनुमति देता है। इसके अलावा यह आपकी विधि को "चार्ज करने योग्य" वस्तु को स्वीकार करने की अनुमति देता है।

29
यहाँ

मैं कैसे सीखा के बारे में

इस परिदृश्य की कल्पना पर तरीकों में से एक है

abstract class Plane { 

    public function openDoors(); 
} 


interface Fliers { 
    public function fly(); 
} 

अब उन्हें

class Boeing747 extends Plane implements Fliers { 
    public function fly() { 
    // some stuff 
    } 

    public function openDoors() { 
    // do something 
    } 

} 

और

class Tweety implements Fliers{ 
    public function fly() { 
    // some stuff 
    } 
} 

Boeing747 है का उपयोग करने देता विमान जो उड़ सकता है और ट्वीटी एक पक्षी उड़ सकता है, लेकिन कोई भी "openDoors" नहीं समझ सकता है। मुद्दा यह है कि इंटरफेस को विभिन्न प्रकार की वस्तुओं द्वारा लागू किया जा सकता है लेकिन कक्षाएं नहीं कर सकती हैं। जैसा कि आप बोइंग 747 देखते हैं और ट्वीटी में कुछ भी सामान्य नहीं है लेकिन दोनों उड़ सकते हैं।

+3

सही उत्तर IMHO – gargantuan

+1

मैं मानता हूं कि यह एक बहुत ही उपयोगी उत्तर है। इसे स्पष्टता के लिए संपादित करना पसंद करेंगे। –

+2

आप क्या संपादित करना चाहते हैं? –

0

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

0

मैं इस समय खुद को पकड़ने के लिए संघर्ष कर रहा हूं (और मुझे लगता है कि मैं ओपी के समान पुस्तक पढ़ रहा हूं ...)।

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

कोई वास्तविक विरासत शामिल नहीं है?

-2

मैं आपको उदाहरण वर्गों

public interface transport{ 
public double getSpeed(){return(0/*the speed*/);} 
public void setSpeed(){return(0/*the speed*/);} 


} 
class car extend transport{ 
//implementation of transport interface 
public double getSpeed(){return(speed/*the speed*/);} 
public void setSpeed(){speed=250;} 
} 
class train extend transport{ 
//implementation of transport interface 
.... 

} 

class plane extend transport{ 
//implementation of transport interface 
.... 
} 

के इस प्रकार के dimnation समझने के लिए इंटरफ़ेस वर्ग सामान्य अवधारणा है दे।

+0

खराब जवाब। या बिल्कुल जवाब नहीं है। – Lenin

+0

एक इंटरफेस 'उपकरण' – Louwki

+0

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

-1

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

इंटरफेस का उपयोग करने का adv:

1-जावा एकाधिक वंशानुक्रम समर्थन नहीं करता। यदि हम विभिन्न वर्गों से दो अलग-अलग तरीकों को जोड़ना चाहते हैं तो हम नहीं कर सकते (क्लासए, कक्षाबी का विस्तार) संभव नहीं है ए, बी कोई समस्या नहीं है।

2- दूसरी सलाह एक सुरक्षा और लचीलापन है एक उदाहरण होने के लिए दिया जा सकता है यदि हम चाहते हैं कि कक्षा के कुछ तरीके पहुंच योग्य नहीं हैं तो हम यह कैसे कर सकते हैं? बहुरूपता + इंटरफ़ेस हम कर सकते हैं कि अगर हम पैदल दूरी पर नहीं करना चाहते हैं और छाल तरीकों पहुँच योग्य नहीं होना चाहिए

abstract class Animal { 
    String name; 
    int age; 

    public Animal(String name, int age) { 
     super(); 
     this.name = name; 
     this.age = age; 
    } 

} 

class Dog extends Animal implements Run { 

    public Dog(String name, int age) { 
     super(name, age); 
     // TODO Auto-generated constructor stub 
    } 

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

    } 

    public void bark() { 

    } 

} 

class Cat extends Animal implements Climb { 

    public Cat(String name, int age) { 
     super(name, age); 

    } 

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

    } 

    public void walk() { 

    } 

} 

public class Main { 

    public static void main(String[] args) { 

     // if we want that some of methods of the class are not reachable how 
     // can we do that? 
     // polymorphism + interface we can do that 
     // for example if we do not want walk and bark methods should be 
     // unreachable 

     Climb cat = new Cat("boncuk", 5); 
     Run dog = new Dog("karabas", 7); 

     // see we cannot reach the method walk() or bark() 
     dog.walk(); // will give an error. since there is no such a method in the interface. 

    } 

}} 

    enter code here 
संबंधित मुद्दे