JavaRush /Blog Jawa /Random-JV /Kelas nested statis

Kelas nested statis

Diterbitake ing grup
Hello! Kita terus njelajah topik kelas nested ing basa Jawa. Ing wulangan pungkasan, kita ngomong babagan kelas nested non-statis utawa, sing uga disebut, kelas batin. Kelas nested statis - 2Dina iki ayo pindhah menyang grup liyane lan ndeleng kanthi luwih rinci babagan kelas bersarang statis. Kelas nested statis - 3Kepiye bedane karo klompok liyane? Nalika ngumumake kelas kasebut, kita nggunakake tembung kunci statis sing wis dikenal:
public class Boeing737 {

   private int manufactureYear;
   private static int maxPassengersCount = 300;

   public Boeing737(int manufactureYear) {
       this.manufactureYear = manufactureYear;
   }

   public int getManufactureYear() {
       return manufactureYear;
   }

   public static class Drawing {

       public static int getMaxPassengersCount() {

           return maxPassengersCount;
       }
   }
}
Kelas nested statis - 4Ing conto iki, kita duwe kelas eksternal Boeing737sing nggawe pesawat saka model iki. Lan wis konstruktor karo siji parameter: taun Pabrik ( int manufactureYear). Ana uga siji variabel statis int maxPassengersCount- jumlah maksimum penumpang. Iku bakal padha kanggo kabeh pesawat saka model padha, supaya kita mung perlu siji salinan. Kajaba iku, nduweni kelas batin statis Drawing- cetak biru pesawat. Ing kelas iki kita bisa encapsulate kabeh informasi layanan bab pesawat. Ing conto kita, kanggo kesederhanaan, kita diwatesi ing taun pabrik, nanging bisa ngemot akeh informasi liyane. Kelas nested statis - 5Nalika kita rembugan ing kuliah pungkasan, nggawe kelas nested kuwi mundhak enkapsulasi lan dipun promosiaken abstraksi luwih nyata. Apa bedane kelas nested statis lan non-statis? 1. A obyek kelas statis Drawingora nyimpen referensi kanggo Kayata tartamtu saka kelas njaba. Elingi conto saka ceramah pungkasan karo sepeda:
public class Bicycle {

   private String model;
   private int mawWeight;

   public Bicycle(String model, int mawWeight) {
       this.model = model;
       this.mawWeight = mawWeight;
   }

   public void start() {
       System.out.println("Go!");
   }

   public class SteeringWheel {

       public void right() {
           System.out.println("Steering wheel to the right!");
       }

       public void left() {

           System.out.println("Steering wheel to the left!");
       }
   }

}
Ana kita ngedika bab carane SteeringWheelreferensi kanggo obyek saka kelas njaba (sepeda) liwati menyang saben Kayata saka kelas utama (setir) tanpa kita ngelingi Bicycle. Tanpa obyek saka kelas njaba, obyek saka kelas njero mung ora bisa ana. Iki ora bener kanggo kelas nested statis. Obyek saka kelas nested statis bisa gampang ana dhewe. Ing babagan iki, kelas statis luwih "mandiri" tinimbang kelas non-statis. Titik mung yaiku nalika nggawe obyek kasebut sampeyan kudu nemtokake jeneng kelas eksternal:
public class Main {

   public static void main(String[] args) {

       Boeing737.Drawing drawing1 = new Boeing737.Drawing();
       Boeing737.Drawing drawing2 = new Boeing737.Drawing();
   }
}
Apa sebabe kelas kasebut Drawingstatis, nanging ing kuliah pungkasan kelas Seat(kursi sepeda) ora statis? Kaya sing wingi, ayo ditambahi "filosofi" sethithik kanggo mangerteni contone :) Beda karo kursi sepeda, inti saka gambar kasebut ora kenceng banget karo esensi pesawat. Obyek kursi sing kapisah, tanpa sepedha, paling asring ora ana gunane (sanajan ora mesthi - kita ngomong babagan iki ing pawulangan pungkasan). Inti saka drawing ndadekake pangertèn ing dhewe. Contone, bisa uga migunani kanggo insinyur sing ngrancang ndandani pesawat. Dheweke ora butuh pesawat dhewe kanggo ngrancang, lan bisa ditemokake ing endi wae - cukup gambar. Kajaba iku, kanggo kabeh pesawat saka model padha, drawing bakal tetep padha, supaya ora ana sambungan kaku kayata jog karo mancal. Mulane, obyek kasebut Drawingora mbutuhake link menyang obyek pesawat tartamtu. 2. Akses beda kanggo variabel lan cara saka kelas external. Kelas nested statis mung bisa ngakses kolom statis saka kelas njaba. Ing conto kita, kelas Drawingnduweni cara getMaxPassengersCount()sing ngasilake nilai variabel statis maxPassengersCountsaka kelas eksternal. Nanging, kita ora bisa nggawe cara getManufactureYear()kanggo Drawingngasilake nilai manufactureYear. Sawise kabeh, variabel manufactureYeariku non-statis, tegese kudu kalebu ing conto tartamtu Boeing737. Lan kaya sing wis dingerteni, ing kasus kelas bersarang statis, obyek saka kelas njaba bisa gampang ilang. Empu watesan :) Ora Matter apa akses modifier variabel statis ing kelas njaba wis. Sanajan ana private, isih ana akses saka kelas nested statis. Kabeh uneg-uneg ing ndhuwur ora mung akses menyang variabel statis, nanging uga kanggo cara statis. PENTING! Tembung staticing deklarasi kelas batin ora ateges mung siji obyek sing bisa digawe. Aja bingung obyek karo variabel. Yen kita ngomong babagan variabel statis, ya, variabel kelas statis, contone, maxPassangersCountana ing salinan siji. Nanging nalika ditrapake ing kelas nested, staticmung tegese obyek kasebut ora ngemot referensi kanggo obyek kelas njaba. Lan kita bisa nggawe akeh obyek sing kita seneng:
public class Boeing737 {

   private int manufactureYear;
   private static int maxPassengersCount = 300;

   public Boeing737(int manufactureYear) {
       this.manufactureYear = manufactureYear;
   }

   public int getManufactureYear() {
       return manufactureYear;
   }

   public static class Drawing {

       private int id;

       public Drawing(int id) {
           this.id = id;
       }

       public static int getPassengersCount() {

           return maxPassengersCount;
       }

       @Override
       public String toString() {
           return "Drawing{" +
                   "id=" + id +
                   '}';
       }

       public static void main(String[] args) {

           for (int i = 1; i < 6; i++) {

               Boeing737.Drawing drawing = new Boeing737.Drawing(i);
               System.out.println(drawing);
           }
       }
   }
}
We ngumumake cara main()langsung ing kelas nested (ora ana alesan tartamtu kanggo iki - mung supaya ngerti iku bisa), lan digawe 5 obyek Drawing. Senadyan kasunyatan sing kita ora duwe obyek siji saka kelas external. Kaya sing sampeyan ngerteni, ora ana masalah :) Output konsol:

Drawing{id=1}
Drawing{id=2}
Drawing{id=3}
Drawing{id=4}
Drawing{id=5}
Iki mungkasi pelajaran kita! Ing kasus, aku bakal ninggalake sampeyan link menyang bagean babagan ing dokumentasi Oracle . Wacanen yen ana titik sing ora jelas. Saiki wektune kanggo ngrampungake sawetara masalah! :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION