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
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
}
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 {
...
}
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;
}
}
Di kelas Rumah Anda, tambahkan ini:
public House() {
turnon();
}