Saya mengalami masalah yang pada dasarnya tidak dapat saya selesaikan, saya mencoba membuat kode untuk sebuah rumah dan saya ingin melakukan beberapa panggilan ke rumah tersebut tanpa harus menyalakan lampu setiap saat

Nilai bidang saya

private boolean turnon = false;

Dan kemudian metode saya untuk menyalakan lampu

public void turnon() {
   
    turnon = true;
}

Pada dasarnya yang ingin saya hindari adalah tidak memanggil metode setiap kali saya ingin menambahkan House baru, pada dasarnya setelah saya menyalakannya, itu akan menyala untuk setiap instance kelas.

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

Jadi katakanlah saya membuat kelas lain dari House

House y = new House();

Saya ingin lampu dinyalakan di y karena saya sudah menyalakannya di x

Saya mencoba mendefinisikan metode secara statis tetapi tidak berhasil, saran apa pun akan dihargai

1
Samer Ak 16 Januari 2022, 05:30

4 jawaban

Setiap kali Anda membuat rumah baru, Anda dapat menginisialisasi nilai bidang turnOn(perhatikan konvensi camelcase ) di konstruktor.

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

Kemudian Anda dapat menyediakan pengambil dan penyetel reguler untuk mengakses bidang turnOn. Saat membuat rumah lain , Anda cukup menggunakan konstruktor no-arg Anda.

    public House() {
// initializing other fields 
       
    }
0
Gurkirat Singh Guliani 16 Januari 2022, 06:01
Tapi ini tidak akan berfungsi untuk iterasi pertama karena, lampu mati ini hanya akan menyalakannya bahkan pada iterasi pertama karena Anda harus menyalakannya pertama kali
 – 
Samer Ak
16 Januari 2022, 05:50
Setiap kali Anda membuat rumah baru, Anda ingin bidang turnOn menjadi benar, bukan? Saya tidak mengikuti komentar Anda, tolong jelaskan
 – 
Gurkirat Singh Guliani
16 Januari 2022, 05:54
Pada dasarnya setiap kali saya membuat rumah baru setelah rumah awal saya ingin bidang turnOn benar, untuk yang pertama saya tidak ingin itu benar kecuali saya memanggil turnOn
 – 
Samer Ak
16 Januari 2022, 05:57
Untuk rumah awal, Anda dapat memanggil konstruktor berparameter dan untuk rumah lain, Anda dapat memanggil konstruktor no-arg.
 – 
Gurkirat Singh Guliani
16 Januari 2022, 06:02
Namun keduanya memiliki parameter dengan kelas House memiliki parameter luas.
 – 
Samer Ak
16 Januari 2022, 06:05

Alasan mendasar untuk kebingungan di sini adalah: 'Rumah' dan 'Saklar' lampu tidak termasuk dalam kelas yang sama!

Jadi saya pikir Anda harus memodelkan House dan Switch sebagai kelas yang berbeda. Dan buat saja objek rumah 'agregat' satu set 'Switch' dan objek lain di rumah.

Misalnya:

class House {
  List<ElectricalFitting> devices;
}

class Switch extends ElectricalFitting {
...
}
0
gkns 16 Januari 2022, 06:06

Anda dapat mengekstrak status default untuk bidang cahaya sebagai statis ke dalam kelas dasar. Kelas Rumah Anda memperluas kelas dasar ini, mewarisi bidang status default dan menyalin di konstruktornya default ke status instance. Kedua setter mengubah keduanya, status default dan instance.

Jika misalnya status default mati (false), setiap instance House yang baru lampunya dimatikan.

Tetapi jika Anda menyalakan lampu (true) di satu rumah daripada default berubah menjadi true dan setiap instance baru menyalakan lampu.

Setiap instance House yang ada bertindak secara independen terhadap semua house lain saat menyalakan atau mematikan lampu.

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 Januari 2022, 11:51

Di kelas Rumah Anda, tambahkan ini:

public House() {
    turnon();
}
1
Madhav Balakrishnan Nair 16 Januari 2022, 05:34
Jika ini membantu, terimalah ini sebagai jawaban. harus ada tanda centang abu-abu di sebelah pertanyaan apa pun. Silahkan klik
 – 
Madhav Balakrishnan Nair
16 Januari 2022, 05:40