Hi! Kita terus njelajah topik kelas nested ing basa Jawa. Ing latihan pungkasan, kita ngomong babagan kelas nested non-statis, sing uga dikenal minangka kelas batin Dina iki kita pindhah menyang klompok kelas liyane. Kita bakal nimbang kelas nested statis. Kepiye bedane karo kelas liyane? Nalika ngumumake kelas iki, kita nggunakake tembung kunci statis, sing wis sampeyan kenal:
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;
}
}
}
Ing conto iki, kita duwe Boeing737
kelas njaba, sing makili pesawat saka jinis iki. Wis konstruktor karo siji parameter: taun Pabrik ( int manufactureYear
). Ana uga siji variabel statis: jumlah maksimum penumpang ( int maxPassengersCount
). Bakal duwe nilai sing padha kanggo kabeh pesawat saka model sing padha, mula kita mung butuh siji conto. Kajaba iku, nduweni kelas nested statis: Drawing
(makili cithak biru teknik pesawat). Kita nggunakake kelas iki kanggo encapsulate kabeh informasi resmi babagan pesawat. Ing conto kita, kanggo gamblang, kita wis matesi kelas iki kanggo taun Pabrik, nanging bisa ngemot akèh informasi liyane. Nalika kita ngandika ing wulangan pungkasan, nggawe kelas nested kuwi nambah enkapsulasi lan nyumbang kanggo abstraksi luwih nyata. Apa bedane kelas nested statis lan non-statis? 1. Objek saka Drawing
kelas statis ora nyimpen referensi kanggo conto tartamtu saka kelas njaba. Elinga conto sepeda saka pelajaran pungkasan:
public class Bicycle {
private String model;
private int maxWeight;
public Bicycle(String model, int maxWeight) {
this.model = model;
this.maxWeight = maxWeight;
}
public void start() {
System.out.println("Let's go!");
}
public class Handlebar {
public void right() {
System.out.println("Steer right!");
}
public void left() {
System.out.println("Steer left!");
}
}
}
Ing pawulangan kasebut, kita ngomong babagan kasunyatan manawa saben instance saka Handlebar
kelas njero, sing ora katon kanggo kita, ngliwati referensi kanggo conto kelas Bicycle
njaba. Tanpa conto saka kelas njaba, obyek saka kelas njero mung ora bisa ana. Kanggo kelas nested statis, iki ora kedadeyan. Obyek saka kelas nested statis tanggung bisa ana ing dhewe. Ing babagan iki, kelas statis luwih "mandiri" tinimbang non-statis. Siji-sijine sing sampeyan kudu ngerti yaiku nalika nggawe obyek kasebut, sampeyan kudu nemtokake jeneng kelas njaba:
public class Main {
public static void main(String[] args) {
Boeing737.Drawing drawing1 = new Boeing737.Drawing();
Boeing737.Drawing drawing2 = new Boeing737.Drawing();
}
}
Apa kita nggawe Drawing
kelas statis nalika ing pawulangan pungkasan kita digawe ingSeat
kelas (makili kursi mancal) non-statis? Kaya sing wingi, ayo ditambahi "filosofi" sethithik supaya bisa ngerti contone :) Beda karo kursi sepeda, konsep gambar teknik ora kaku karo konsep pesawat. Tanpa sepedha, obyek jog sepeda sing kapisah paling asring ora ana gunane (sanajan ora mesthi, kita ngomong babagan iki ing wulangan pungkasan). Konsep gambar teknik nggawe akal dhewe. Contone, bisa migunani kanggo insinyur sing ngrancang pangopènan pesawat. Pesawat ora perlu kanggo nggawe rencana lan bisa ditemokake ing ngendi wae. Mung gambar teknik sing dibutuhake. Kajaba iku, kabeh pesawat saka model padha bakal duwe gambar engineer padha, supaya ora ana hubungan kenceng kaya ana karo jog mancal. Mulane, aDrawing
obyek ora perlu referensi kanggo obyek pesawat tartamtu. 2. Akses sing beda menyang variabel lan metode kelas njaba. Kelas nested statis mung bisa ngakses kolom statis saka kelas njaba. Ing conto kita, Drawing
kelas nduweni getMaxPassengersCount()
cara sing ngasilake nilai variabel statis maxPassengersCount
saka kelas njaba. Nanging, kita ora bisa nggawe getManufactureYear()
cara ing Drawing
kelas kanggo ngasilake nilai manufactureYear
. Sawise kabeh, manufactureYear
variabel kasebut non-statis, tegese kudu kalebu conto tartamtu saka Boeing737
. Lan kaya sing wis ditemokake, ing kasus kelas bersarang statis, obyek saka kelas njaba bisa uga ora ana. Empu, watesan :) Ora Matter kang akses modifier variabel statis wis ing kelas njaba. Malah yen ikuprivate
, kelas nested statis isih bakal duwe akses. Kabeh ing ndhuwur ditrapake ora mung kanggo akses menyang variabel statis, nanging uga kanggo cara statis. PENTING! Ing deklarasi kelas batin, static
tembung kunci ora ateges sampeyan mung bisa nggawe siji obyek. Aja bingung obyek karo variabel. Yen kita ngomong babagan variabel statis, banjur, ya, ana siji conto variabel kelas statis, contone maxPassangersCount
,. Nanging nalika static
ditrapake ing kelas nested, tegese mung obyek kasebut ora ngemot referensi kanggo obyek kelas njaba. Lan kita bisa nggawe akeh obyek sing dikarepake:
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 main()
cara langsung ing kelas nested (ora ana alesan khusus kanggo iki - mung supaya sampeyan ngerti sing iki bisa), lan digawe 5 Drawing
obyek. Senadyan kasunyatan sing kita ora duwe obyek siji saka kelas njaba. Kaya sing sampeyan ngerteni, iki ora nggawe masalah :) Output konsol:
Drawing{id=1}
Drawing{id=2}
Drawing{id=3}
Drawing{id=4}
Drawing{id=5}
Lan iki rampung pelajaran kita! Yen ngono, aku bakal menehi sampeyan link menyang bagean babagan kasebut ing dokumentasi Oracle . Yen ana sing isih ora jelas, waca. Saiki wektune aku ngrampungake sawetara tugas! :)
GO TO FULL VERSION