2012-04-16 17 views
5

मैं प्रोग्रामिंग कक्षा में मेरे लिए होमवर्क असाइनमेंट पर काम कर रहा हूं जिसमें इंटरफेस को लागू करना शामिल है। यहां समस्या यह है कि मैं वास्तव में बस फ्लैट आउट इंटरफेस को समझ नहीं पा रहा हूं या उनके लिए क्या उपयोग किया जाता है (प्रोफेसर इसे समझाने के बारे में बहुत अच्छा नहीं था)।जावा - कार्यान्वयन इंटरफेस

असाइनमेंट "वाहन" सुपरक्लास, और तीन उप-वर्गों, "ट्रक" या "जीप" जैसे कुछ बनाने के लिए था, जिसमें प्रत्येक के अपने कुछ लक्षण होंगे। "वाहन" वर्ग को तुलनीय इंटरफ़ेस को कार्यान्वित करना होगा, जो मुझे लगता है कि मैंने पाया है (मेरे पास compareTo() वाहनों पर दरवाजे की संख्या की तुलना में लिखी गई विधि है), और एक अन्य वर्ग को "हाइब्रिड" कक्षा को भी लागू करना होगा (मेरे पास नहीं है विचार करें इसका क्या अर्थ है)। इसके बाद हमें toString(), equals(Object o), और compareTo(Object o) विधियों को लागू करना होगा।

मुझे लगता है कि मेरे पास compareTo() नीचे है, लेकिन equals() के साथ मुझे कोई जानकारी नहीं है। आखिरी चीज जो हमें करना है वह परीक्षण करने के लिए मुख्य लिखना है, इसमें वाहन वस्तुओं की एक सरणी बनाना, उन्हें प्रिंट करना, उन्हें छंटाई करना, और फिर उन्हें प्रिंट करना शामिल है। इसे सरणी के माध्यम से फिर से शुरू करना चाहिए और हाइब्रिड के लिए मूल्य प्रीमियम प्रिंट करना चाहिए, और 2 वाहनों की तुलना करने के लिए equals(Object o) विधि का उपयोग करना चाहिए।

यहाँ मेरी "वाहन" सुपर क्लास

package vehicle; 

abstract public class Vehicle implements Comparable { 
    private String color; 
    private int numberOfDoors; 

    // Constructor 
    /** 
    * Creates a vehicle with a color and number of doors 
    * @param aColor The color of the vehicle 
    * @param aNumberOfDoors The number of doors 
    */ 
    public Vehicle(String aColor, int aNumberOfDoors) { 
     this.color = aColor; 
     this.numberOfDoors = aNumberOfDoors; 
    } 

    // Getters 
    /** 
    * Gets the color of the vehicle 
    * @return The color of the vehicle 
    */ 
    public String getColor() {return(this.color);} 
    /** 
    * Gets the number of doors the vehicle has 
    * @return The number of doors the vehicle has 
    */ 
    public int getNumberOfDoors() {return(this.numberOfDoors);} 

    // Setters 
    /** 
    * Sets the color of the vehicle 
    * @param colorSet The color of the vehicle 
    */ 
    public void setColor(String colorSet) {this.color = colorSet;} 
    /** 
    * Sets the number of doors for the vehicle 
    * @param numberOfDoorsSet The number of doors to be set to the vehicle 
    */ 
    public void setNumberOfDoors(int numberOfDoorsSet) {this.numberOfDoors = numberOfDoorsSet;} 

    @Override 
    public int compareTo(Object o) { 
     if (o instanceof Vehicle) { 
      Vehicle v = (Vehicle)o; 
      return this.numberOfDoors - v.getNumberOfDoors(); 
     } 
     else { 
      return 0; 
     } 
    } 

    /** 
    * Returns a short string describing the vehicle 
    * @return a description of the vehicle 
    */ 
    @Override 
    public String toString() { 
     String answer = "The car's color is "+this.color 
       +". The number of doors is"+this.numberOfDoors; 
     return answer; 
    } 
} 

के लिए कोड है और मैं भी मेरी उपवर्गों

package vehicle; 

abstract public class Convertible extends Vehicle { 
    private int topSpeed; 

    // Constructor 
    /** 
    * Creates a convertible with a color, number of doors, and top speed 
    * @param aColor The color of the convertible 
    * @param aNumberOfDoors The number of doors of the convertible 
    * @param aTopSpeed The top speed of the convertible 
    */ 
    public Convertible (String aColor, int aNumberOfDoors, int aTopSpeed) { 
     super(aColor, aNumberOfDoors); 
     this.topSpeed = aTopSpeed; 
    } 

    // Getters 
    /** 
    * Gets the top speed of the convertible 
    * @return The top speed of the convertible 
    */ 
    public int getTopSpeed() {return(this.topSpeed);} 

    // Setters 
    /** 
    * Sets the top speed of the convertible 
    * @param topSpeedSet The top speed to set to the convertible 
    */ 
    public void setTopSpeed(int topSpeedSet) {this.topSpeed = topSpeedSet;} 

    /** 
    * Returns a short description of the convertible 
    * @return a short description of the convertible 
    */ 
    @Override 
    public String toString() { 
     String answer = "The car's color is "+super.getColor() 
       +", the number of doors is "+super.getNumberOfDoors() 
       +", and the top speed is "+this.topSpeed+" mph."; 
     return answer; 
    } 
} 

मैं मेरे लिए काम करने के लिए किसी को भी पूछ निश्चित रूप से नहीं कर रहा हूँ में से एक पोस्ट करेंगे, लेकिन अगर कोई इंटरफेस कैसे काम करता है और यह होमवर्क वास्तव में क्या पूछ रहा है, तो यह थोड़ा और अधिक प्रकाश डाल सकता है।

सभी मदद की बहुत सराहना की जाती है

धन्यवाद!

+1

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

+1

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

+3

मुझे आशा है कि आपका प्रोफेसर इस प्रश्न को नहीं पढ़ेगा। :) – Dhananjay

उत्तर

12

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

इंटरफ़ेस क्या है?

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

interface Bounceable{ 
    public void setBounce(int bounce); 
    public int getBounce(); 
} 

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

यह नियम पुस्तक उपयोगी क्यों होगी?

अच्छा, यदि आप एक खेल का मैदान कोड करना चाहते हैं, जहां बच्चे उछाल वाली चीजों के सभी प्रकार के साथ खेलते हैं। आप उछालभरी बातों के निम्नलिखित प्रकार बना सकता है ..

public class FootBall implements Bounceable{ 
private int bounce; 

public void setBounce(int bounce){ 
    this.bounce = bounce; 
} 

public int getBounce(){ 
    return this.bounce; 
} 

} 

public class BaseBall implements Bounceable{ 
private int bounce; 

public void setBounce(int bounce){ 
    this.bounce = bounce; 
} 

public int getBounce(){ 
    return this.bounce; 
} 

} 

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

संपादित करें: मैं एक छोटे से व्यावहारिक उदाहरण को शामिल किया है ..

इस का एक व्यावहारिक उदाहरण होगा ..

public void slamDunk(Bounceable bouncyThing){ 
    System.out.println("You scored three points!"); 
} 

दोनों Slamdunk के लिए निम्न कॉल की मान्य हैं ...

slamDunk(new BaseBall()); 

slamDunk(new FootBall()); 

अब आप अपने slameDunk समारोह किसी भी bounceable वस्तु के साथ अंक स्कोर कर सकते हैं।

+0

धन्यवाद, यह सहायक है – salxander

+0

उदाहरण के लिए धन्यवाद, आपके गहराई से जवाब में वास्तव में मुझे – salxander

0

तुलनीय इंटरफ़ेस the docs http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html में वर्णित है और हस्ताक्षर है: यदि आप लिखना

int compareTo(T o) 
Compares this object with the specified object for order. 
Returns a negative integer, zero, or a positive integer as this object is less than, 
equal to, or greater than the specified object. 

:

public class Vehicle implements Comparable { 
//... 
} 

और उसके बाद आप एक त्रुटि मिल जाएगा यह संकलित करने के लिए प्रयास करते हैं, । इंटरफ़ेस की आवश्यकता है कि आपके पास compareTo() विधि हो। आपको इसे लिखना है, और इसे एक पूर्णांक मान वापस करना है। यह वाहन सकारात्मक, नकारात्मक या शून्य होगा कि वाहन "से अधिक", "उससे कम" या किसी अन्य वाहन के बराबर है या नहीं। आप तय करते हैं कि "से अधिक" का अर्थ क्या है - यह द्रव्यमान, आयु, मूल्य या कुछ भी हो सकता है। यह इंटरफेस का मूल्य है - यह कहता है कि आपको क्या करना है, लेकिन यह नहीं कि आपको इसे कैसे करना है।

चूंकि आप इसे स्वयं करना चाहते हैं, तो मेरा सुझाव है कि आप तुलनात्मक पर किसी भी ट्यूटोरियल का पालन करें।

0

जैसा कि अन्य ने कहा, एक इंटरफेस एक वर्ग के लिए अनुबंध की तरह है। एक वर्ग एक अंतरफलक यह एक निश्चित तरीके से व्यवहार करने के लिए दावा कर रहा है लागू करता है जब (उदाहरण के लिए जब अपने वर्ग Comparable लागू करता है, यह अन्य वस्तुओं के बराबर होने का दावा है, और यह compareTo विधि को लागू करने से इस अनुबंध संतुष्ट करता है।)

ऐसा लगता है जैसे आपकी परेशानी इंटरफेस के साथ नहीं है - आपने पहले से ही Comparable लागू किया है। आपको अपने compareTo में null की जांच करनी चाहिए।

आप लगभग equals(Object o) के बारे में पूछते हैं। यह compareTo(Object o) से भी आसान है - इसे true वापस करने की आवश्यकता है जब आप जिस वस्तु की तुलना कर रहे हैं वह वही है, और false जब यह नहीं है। (सावधान रहें और null के खिलाफ जांचना याद रखें - यदि onull आपको झूठी वापसी करनी चाहिए)।

इसके अलावा, आप toString() के बारे में पूछते हैं, लेकिन आपने पहले से ही अपने कोड में toString() लागू किया है। एकमात्र टिप्पणी यह ​​है कि एक विशेष सबक्लास 'toString() शायद इसके बारे में कुछ विशेष उल्लेख करना चाहिए (उदा। कि यह एक परिवर्तनीय या संकर आदि है ...)

+0

असाइनमेंट में मदद करने में मदद मिली है! – salxander

0

कार्यक्रम में और एक वर्ग के तरीके के रूप में हर क्रिया (नीचे परिदृश्य में (एक वर्ग के रूप में हर संज्ञा कुछ समय संपत्ति के बारे में सोच))

आप एक रोबोट का निर्माण कर रहे हैं। आपने रोबोट पर चीजों के नीचे किया था। 2 आई सेंसर, 2 हाथ, 2 पैर और एक सिर (रोबोट = 2 मीटर की ऊंचाई) 2. इस रोबोट से संवाद करने के लिए आपने 10 तारों को सिर से बाहर निकाला, पैर से बाहर 10 तार और हाथ से 13 तार।

और तर्क यह है कि यदि सिर तार संख्या 1 पैर तार संख्या 2 में शामिल होता है तो रोबोट चलना होगा। यदि हाथ में तार संख्या 9 सिर तार संख्या 4 में शामिल हो जाती है और सिर के तार 1 हाथों के तार 6 में शामिल हो जाती है तो दोनों हाथ ऊपर जायेंगे .... आदि। आईएमपी नोट - सिर पर तार 3 पैर पर तार 5 को कभी छूना नहीं चाहिए। हर चीज अन्यथा उड़ जाएगी।

क्या एक इंटरफेस हुह!

और अब कल्पना करें कि रोबोट को पहली बार देखने वाले किसी को यह देना होगा। अब सोचें कि इस रोबोट का उपयोग कैसे किया जाएगा।


जब आप कक्षा बनाते हैं तो इसी तरह के नोट्स पर आपको यह ध्यान रखना चाहिए कि इसका उपयोग अन्य कार्यक्रम द्वारा कैसे किया जाएगा। क्या आप अन्य कार्यक्रमों के लिए सार्वजनिक क्षेत्र (int और string) उपलब्ध करना चाहते हैं या आप सरल कार्य चाहते हैं जो उन सभी जटिल पूर्णांक तर्कों का ख्याल रखेगा।

इंटरफेस 2 वर्गों के बीच संवाद करने का आसान तरीका प्रदान करता है और ऐसा करने के दौरान उन्हें चिंता करने की ज़रूरत नहीं है कि मेरी कक्षा की अन्य चीजों के साथ क्या होगा।

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