मैं एक ऐसी समस्या का सामना कर रहा हूं जिसे मैं मूल रूप से हल नहीं कर सकता, मैं एक घर के लिए एक कोड बनाने की कोशिश कर रहा हूं और मैं हर बार प्रकाश चालू किए बिना घर पर कई कॉल करना चाहता हूं

मेरा क्षेत्र मूल्य

private boolean turnon = false;

और फिर रोशनी चालू करने की मेरी विधि

public void turnon() {
   
    turnon = true;
}

मूल रूप से मैं जो बचना चाहता हूं वह यह है कि हर बार जब मैं एक नया घर जोड़ना चाहता हूं तो विधि को कॉल नहीं करना है, मूल रूप से एक बार जब मैं इसे चालू करता हूं तो कक्षा के हर उदाहरण के लिए चालू हो जाता है।

House x = new House();
x.turnon(); 

तो मान लीजिए कि मैं सदन का एक और वर्ग बना देता हूं

House y = new House();

मैं चाहता हूं कि रोशनी y में चालू हो क्योंकि मैंने उन्हें पहले ही x . में चालू कर दिया है

मैंने विधि को स्थिर रूप से परिभाषित करने का प्रयास किया लेकिन यह काम नहीं किया, किसी भी सुझाव की सराहना की जाएगी

1
Samer Ak 16 जिंदा 2022, 05:30

4 जवाब

जब भी आप एक नया घर बना रहे हों, तो आप कंस्ट्रक्टर में फील्ड टर्नऑन (नोटिस कैमलकेस कन्वेंशन) के मूल्य को इनिशियलाइज़ कर सकते हैं।

    public House(boolean turnOn) {
// initializing other fields 
        this.turnOn = turnOn; 
    }

फिर आप टर्नऑन फ़ील्ड तक पहुँचने के लिए नियमित गेट्टर और सेटर प्रदान कर सकते हैं। अन्य घर बनाते समय, आप बस अपने नो-आर्ग कंस्ट्रक्टर का उपयोग कर सकते हैं।

    public House() {
// initializing other fields 
       
    }
0
Gurkirat Singh Guliani 16 जिंदा 2022, 06:01
लेकिन यह पहले पुनरावृत्ति के लिए काम नहीं करेगा, प्रकाश बंद है, यह इसे पहले पुनरावृत्ति पर भी चालू कर देगा क्योंकि आपको इसे पहली बार चालू करने की आवश्यकता है
 – 
Samer Ak
16 जिंदा 2022, 05:50
जब भी आप एक नया घर बनाते हैं, तो आप चाहते हैं कि टर्नऑन फील्ड सही हो, है ना? मैंने आपकी टिप्पणी का पालन नहीं किया, कृपया विस्तृत करें
 – 
Gurkirat Singh Guliani
16 जिंदा 2022, 05:54
मूल रूप से जब भी मैं प्रारंभिक घर के बाद एक नया घर बनाता हूं, तो मैं चाहता हूं कि टर्नऑन फील्ड सच हो, पहले के लिए मैं नहीं चाहता कि यह सच हो, जब तक कि मैं टर्नऑन को कॉल नहीं करता
 – 
Samer Ak
16 जिंदा 2022, 05:57
प्रारंभिक घर के लिए, आप एक पैरामीटरयुक्त कंस्ट्रक्टर को कॉल कर सकते हैं और अन्य घरों के लिए, आप एक नो-आर्ग कंस्ट्रक्टर को कॉल कर सकते हैं।
 – 
Gurkirat Singh Guliani
16 जिंदा 2022, 06:02
लेकिन उन दोनों के पास हाउस क्लास द्वारा पैरामीटर क्षेत्र का पैरामीटर है।
 – 
Samer Ak
16 जिंदा 2022, 06:05

यहाँ भ्रम का मूल कारण है: 'हाउस' और एक लाइट 'स्विच' एक ही वर्ग से संबंधित नहीं हैं!

तो मुझे लगता है कि आपको हाउस और स्विच को विभिन्न वर्गों के रूप में मॉडल करना चाहिए। और घर की वस्तु को 'कुल' बना लें और घर में 'स्विच' और अन्य वस्तुओं का एक सेट बना लें।

जैसे:

class House {
  List<ElectricalFitting> devices;
}

class Switch extends ElectricalFitting {
...
}
0
gkns 16 जिंदा 2022, 06:06

आप बेस क्लास में स्थिर क्षेत्र के रूप में प्रकाश के लिए एक डिफ़ॉल्ट स्थिति निकाल सकते हैं। आपका हाउस क्लास इस बेस क्लास को बढ़ाता है, डिफॉल्ट स्टेट फील्ड को इनहेरिट करता है और इसके कंस्ट्रक्टर में कॉपी को इंस्टेंस स्टेट के लिए डिफॉल्ट करता है। दो सेटर्स डिफ़ॉल्ट और इंस्टेंस स्थिति दोनों को बदलते हैं।

उदाहरण के लिए यदि डिफ़ॉल्ट स्थिति लाइट ऑफ (झूठी) है, तो हाउस के हर नए इंस्टेंस की लाइट बंद है।

लेकिन अगर आप एक घर में लाइट चालू (सत्य) करते हैं, तो डिफ़ॉल्ट रूप से सत्य में बदल जाता है और हर नए उदाहरण में प्रकाश चालू हो जाता है।

सदन का प्रत्येक मौजूदा उदाहरण प्रकाश को चालू या बंद करने पर अन्य सभी सदनों के लिए स्वतंत्र रूप से कार्य करता है।

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;
    }

}
0
Stefan D. 16 जिंदा 2022, 11:51

अपनी हाउस क्लास में इसे जोड़ें:

public House() {
    turnon();
}
1
Madhav Balakrishnan Nair 16 जिंदा 2022, 05:34
अगर यह मदद करता है, तो कृपया इसे उत्तर के रूप में स्वीकार करें। किसी भी प्रश्न के आगे एक ग्रे चेकमार्क होना चाहिए। कृपया इसे क्लिक करें
 – 
Madhav Balakrishnan Nair
16 जिंदा 2022, 05:40