JavaRush /Blog Jawa /Random-JV /Getters lan setter

Getters lan setter

Diterbitake ing grup
Hello! Ing kuliah sadurunge, sampeyan wis sinau carane nggawe kelas lengkap, kanthi lapangan lan metode. Iki kemajuan serius, rampung! Nanging saiki aku kudu ngandhani bebener sing ora nyenengake. Kita ora nggawe kelas kanthi bener! Kenging punapa? Sepisanan, ora ana kesalahan ing kelas iki:
public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }
}
Nyatane, ana. Bayangake nalika lungguh ing kantor sampeyan nulis kelas kaya iki Cat, nuduhake kucing. Lan banjur mulih. Nalika sampeyan lagi adoh, programer liyane teka kanggo bisa, nggawe kelas dhewe Main, ngendi dheweke wiwit nggunakake kelas sampeyan wrote Cat.
public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();
       cat.name = "";
       cat.age = -1000;
       cat.weight = 0;
   }
}
Ora preduli kenapa dheweke nindakake utawa kepiye kedadeyan: bisa uga wong kasebut kesel utawa ora cukup turu. Liyane sing penting: kelas kita saiki Catngidini sampeyan nemtokake nilai edan menyang lapangan. Akibaté, program kasebut ngemot obyek kanthi status sing salah, kayata kucing iki kanthi umur -1000 taun. Kesalahan apa sing pungkasane kita lakoni? Nalika kita nggawe kelas, kita kapapar data sawijining. Fields name, agelan weightana ing domain umum. Bisa diakses ing ngendi wae ing program: mung nggawe obyek Cat- lan kabeh programmer duwe akses menyang data langsung liwat operator " ."
Cat cat = new Cat();
cat.name = "";
Ing kene kita langsung ngakses lapangan namelan nyetel regane. Kita kudu piye wae nglindhungi data saka gangguan njaba sing salah. Apa sing dibutuhake kanggo iki? Kaping pisanan, kabeh variabel conto (kolom) kudu ditandhani karo modifier private. Pribadi minangka modifier akses paling ketat ing Jawa. Yen sampeyan nggunakake, lapangan kelas Catora bisa diakses ing njaba.
public class Cat {

   private String name;
   private int age;
   private int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }
}

public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();
       cat.name = "";//error! The name field in the Cat class has private access!
   }
}
Compiler ndeleng iki lan langsung ngasilake kesalahan. Saiki sawah-sawah katon dilindhungi. Nanging ternyata akses menyang dheweke "rapet" ditutup: program kasebut ora bisa entuk bobote kucing sing ana, yen perlu. Iki uga dudu pilihan: ing wangun iki kelas kita meh ora bisa digunakake. Saenipun kita kudu ngidini sawetara jinis akses winates kanggo data:
  • Programer liyane kudu bisa nggawe obyekCat
  • Dheweke kudu bisa maca data saka obyek sing wis ana (contone, entuk jeneng utawa umur kucing sing wis ana)
  • Sampeyan uga kudu bisa nemtokake nilai lapangan. Nanging ing wektu sing padha - mung nilai sing bener. Objek kita kudu direksa saka sing salah (ora ana "umur = -1000 taun" lan liya-liyane).
Dhaptar syarat prayoga! Nanging nyatane, kabeh iki gampang digayuh kanthi nggunakake metode khusus - getters and setters .
Getters lan setter - 2
Jeneng kasebut asale saka basa Inggris " njaluk " - " nampa " (yaiku, "metode kanggo entuk nilai lapangan") lan nyetel - " set " (yaiku, "metode kanggo nyetel nilai lapangan"). Ayo ndeleng apa sing katon nggunakake kelas kita minangka conto Cat:
public class Cat {

   private String name;
   private int age;
   private int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public int getWeight() {
       return weight;
   }

   public void setWeight(int weight) {
       this.weight = weight;
   }
}
Nalika sampeyan bisa ndeleng, kabeh iku cukup prasaja :) Jeneng sing paling asring kasusun saka tembung njaluk / nyetel + jeneng lapangan sing padha tanggung jawab. Contone, metode getWeight()ngasilake nilai lapangan weightobyek sing diarani. Iki katon kaya ing program kasebut:
public class Main {

   public static void main(String[] args) {

       Cat barsik = new Cat("Barsik", 5, 4);
       String barsikName = barsik.getName();
       int barsikAge = barsik.getAge();
       int barsikWeight = barsik.getWeight();

       System.out.println("Cat name: " + barsikName);
       System.out.println("Cat's age: " + barsikAge);
       System.out.println("Weight of the cat: " + barsikWeight);
   }
}
Output konsol:

Name кота: Барсик
Возраст кота: 5
Вес кота: 4
Saiki saka kelas liyane ( Main) ana akses menyang kolom Cat, nanging mung liwat getter . Wigati dimangerteni manawa getter duwe modifier akses public, tegese bisa diakses saka ngendi wae ing program kasebut. Apa babagan menehi nilai? Cara Setter tanggung jawab kanggo iki
public void setName(String name) {
   this.name = name;
}
Pakaryane, kaya sing sampeyan ngerteni, uga gampang. Kita nelpon metode setName()ing obyek Cat, pass string minangka argumen, lan string iki ditugasake menyang lapangan nameobyek kita.
public class Main {

   public static void main(String[] args) {

       Cat barsik = new Cat("Barsik", 5, 4);

       System.out.println("The original name of the cat is " + barsik.getName());
       barsik.setName("Basil");
       System.out.println("The new name of the cat -" + barsik.getName());
   }
}
Ing kene kita nggunakake getter lan setter. Pisanan, nggunakake getter, kita nampa lan output kanggo console jeneng dhisikan saka kucing. Banjur, nggunakake setter, namenilai anyar diutus menyang lapangan - "Vasily". Banjur, nggunakake getter, kita entuk jeneng maneh kanggo mriksa yen pancen diganti. Output konsol:

Изначальное Name кота — Барсик
Новое Name кота — Васorй
Iku bakal katon, apa bedane? Kita uga bisa nemtokake nilai sing salah menyang kolom obyek, sanajan kita duwe setter:
public class Main {

   public static void main(String[] args) {

       Cat barsik = new Cat("Barsik", 5, 4);
       barsik.setAge(-1000);

       System.out.println("Age of Barsik -" + barsik.getAge() + " years");
   }
}
Output konsol:

Возраст Барсика — -1000 лет
Bentenipun punika setter punika cara lengkap . Lan ing cara, ora kaya lapangan, sampeyan bisa nyelehake logika verifikasi sing dibutuhake kanggo nyegah nilai sing ora bisa ditampa. Contone, sampeyan bisa kanthi gampang mateni nemtokake nomer negatif minangka umur:
public void setAge(int age) {
   if (age >= 0) {
       this.age = age;
   } else {
       System.out.println("Error! Age cannot be negative!");
   }
}
Lan saiki kode kita bisa digunakake kanthi bener!
public class Main {

   public static void main(String[] args) {

       Cat barsik = new Cat("Barsik", 5, 4);
       barsik.setAge(-1000);

       System.out.println("Age of Barsik -" + barsik.getAge() + " years");
   }
}
Output konsol:

Ошибка! Возраст не может быть отрицательным числом!
Возраст Барсика — 5 лет
Ana watesan nang setter, lan nglindhungi saka nyoba kanggo nyetel data salah. Umure Barsik tetep ora owah. Getters lan setter kudu tansah digawe. Sanajan kolom sampeyan ora ana watesan babagan nilai sing bisa ditindakake, ora bakal ana cilaka. Mbayangno kahanan: sampeyan lan kanca-kanca nulis program bebarengan. Sampeyan nggawe kelas Catkaro lapangan umum, lan kabeh programer digunakake minangka pengin. Lan ing sawijining dina sing apik, sampeyan bakal ngerti: "Damn, cepet utawa mengko ana wong sing ora sengaja menehi nomer negatif menyang variabel weight! Kita kudu nggawe setter lan nggawe kabeh lapangan pribadi! Sampeyan nggawe, lan kabeh kode sing ditulis dening kolega sampeyan langsung rusak. Sawise kabeh, dheweke wis nulis akeh kode ing ngendi dheweke Catlangsung ngakses lapangan.
cat.name = "Hippopotamus";
Lan saiki lapangan wis dadi pribadi lan compiler ngasilake akeh kesalahan!
cat.name = "Hippopotamus";//error! The name field of the Cat class has private access!
Ing kahanan kaya ngono, luwih becik ndhelikake lapangan lan nggawe getter-setter wiwit wiwitan . Kabeh kolega sampeyan bakal nggunakake, lan yen sampeyan ngerti yen sampeyan kudu matesi nilai lapangan, sampeyan mung bakal nambah mriksa ing setter. Lan ora ana sing bakal ngilangi kode sing wis ditulis. Mesthi wae, yen sampeyan pengin akses mung diwaca menyang lapangan tartamtu, sampeyan bisa nggawe siji getter. "Njaba", yaiku, ing njaba kelas sampeyan, mung cara sing bisa diakses. Data kasebut kudu didhelikake.
Getters lan setter - 4
Analogi bisa digawe nganggo ponsel. Mbayangno yen tinimbang telpon seluler biasa diuripake, sampeyan diwenehi telpon karo kasus mbukak, ngendi kabeh kabel, sirkuit, etc. tancep metu. Telpon bisa digunakake: yen sampeyan nyoba hard lan biola karo diagram, sampeyan bisa uga bisa nelpon. Nanging sampeyan mbokmenawa mung bakal break. Nanging, perusahaan manufaktur menehi antarmuka: klien mung nelpon nomer sing dibutuhake, menet tombol ijo nganggo handset, lan telpon diwiwiti. Lan dheweke ora preduli apa sing kedadeyan ing sirkuit lan kabel lan kepiye nindakake tugase. Ing conto iki, perusahaan nduweni akses winates menyang "internal" (data) telpon lan mung ninggalake antarmuka (metode) ing njaba. Akibaté, klien bakal entuk apa sing dikarepake (telpon) lan mesthi ora bakal ngilangi apa-apa ing njero.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION