मैं एक ऐसी समस्या का सामना कर रहा हूं जिसे मैं मूल रूप से हल नहीं कर सकता, मैं एक घर के लिए एक कोड बनाने की कोशिश कर रहा हूं और मैं हर बार प्रकाश चालू किए बिना घर पर कई कॉल करना चाहता हूं
मेरा क्षेत्र मूल्य
private boolean turnon = false;
और फिर रोशनी चालू करने की मेरी विधि
public void turnon() {
turnon = true;
}
मूल रूप से मैं जो बचना चाहता हूं वह यह है कि हर बार जब मैं एक नया घर जोड़ना चाहता हूं तो विधि को कॉल नहीं करना है, मूल रूप से एक बार जब मैं इसे चालू करता हूं तो कक्षा के हर उदाहरण के लिए चालू हो जाता है।
House x = new House();
x.turnon();
तो मान लीजिए कि मैं सदन का एक और वर्ग बना देता हूं
House y = new House();
मैं चाहता हूं कि रोशनी y में चालू हो क्योंकि मैंने उन्हें पहले ही x . में चालू कर दिया है
मैंने विधि को स्थिर रूप से परिभाषित करने का प्रयास किया लेकिन यह काम नहीं किया, किसी भी सुझाव की सराहना की जाएगी
4 जवाब
जब भी आप एक नया घर बना रहे हों, तो आप कंस्ट्रक्टर में फील्ड टर्नऑन (नोटिस कैमलकेस कन्वेंशन) के मूल्य को इनिशियलाइज़ कर सकते हैं।
public House(boolean turnOn) {
// initializing other fields
this.turnOn = turnOn;
}
फिर आप टर्नऑन फ़ील्ड तक पहुँचने के लिए नियमित गेट्टर और सेटर प्रदान कर सकते हैं। अन्य घर बनाते समय, आप बस अपने नो-आर्ग कंस्ट्रक्टर का उपयोग कर सकते हैं।
public House() {
// initializing other fields
}
यहाँ भ्रम का मूल कारण है: 'हाउस' और एक लाइट 'स्विच' एक ही वर्ग से संबंधित नहीं हैं!
तो मुझे लगता है कि आपको हाउस और स्विच को विभिन्न वर्गों के रूप में मॉडल करना चाहिए। और घर की वस्तु को 'कुल' बना लें और घर में 'स्विच' और अन्य वस्तुओं का एक सेट बना लें।
जैसे:
class House {
List<ElectricalFitting> devices;
}
class Switch extends ElectricalFitting {
...
}
आप बेस क्लास में स्थिर क्षेत्र के रूप में प्रकाश के लिए एक डिफ़ॉल्ट स्थिति निकाल सकते हैं। आपका हाउस क्लास इस बेस क्लास को बढ़ाता है, डिफॉल्ट स्टेट फील्ड को इनहेरिट करता है और इसके कंस्ट्रक्टर में कॉपी को इंस्टेंस स्टेट के लिए डिफॉल्ट करता है। दो सेटर्स डिफ़ॉल्ट और इंस्टेंस स्थिति दोनों को बदलते हैं।
उदाहरण के लिए यदि डिफ़ॉल्ट स्थिति लाइट ऑफ (झूठी) है, तो हाउस के हर नए इंस्टेंस की लाइट बंद है।
लेकिन अगर आप एक घर में लाइट चालू (सत्य) करते हैं, तो डिफ़ॉल्ट रूप से सत्य में बदल जाता है और हर नए उदाहरण में प्रकाश चालू हो जाता है।
सदन का प्रत्येक मौजूदा उदाहरण प्रकाश को चालू या बंद करने पर अन्य सभी सदनों के लिए स्वतंत्र रूप से कार्य करता है।
public abstract class HouseBase {
protectet static boolean defaultSwitchState = false;
}
public class House extends HouseBase {
private boolean turnOn = false;
public House() {
turnOn = defaultSwitchState;
}
public void turnOn() {
super.defaultSwitchState = true;
turnOn = true;
}
public void turnOff() {
super.defaultSwitchState = false;
turnOn = false;
}
}
अपनी हाउस क्लास में इसे जोड़ें:
public House() {
turnon();
}
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।