Kita bakal njelasno saka awal nganti pungkasan: carane konstruktor disebut, carane lan ing urutan apa kothak (kalebu kolom statis) initialized, etc. Kita sadurunge wis ndemek sawetara saka TCTerms rembugan ing artikel, supaya sampeyan bisa Mirit liwat materi ing konstruktor kelas dhasar . Pisanan, ayo ngelingi carane obyek digawe. Sampeyan uga ngelingi carane proses iki katon saka sudut pandang pangembang: dheweke nggawe kelas, nulis new, lan kabeh wis siyap :) Ing kene kita bakal ngomong babagan apa sing kedadeyan ing komputer lan mesin Java nalika nulis, contone:
Cat cat = new Cat();
Kita wis ngomong babagan iki sadurunge, nanging mung yen kita bakal ngelingake sampeyan:
- Pisanan, memori kanggo nyimpen obyek diparengake.
- Sabanjure, mesin Java nggawe referensi kanggo obyek kasebut (ing kasus kita referensi yaiku Cat cat).
- Pungkasan, variabel diinisialisasi lan konstruktor diarani (kita bakal nliti proses iki kanthi luwih rinci).
Iki rong titik pisanan ngirim ora mundhakaken pitakonan khusus. Alokasi memori minangka proses sing prasaja, lan mung ana rong asil: ana memori utawa ora :) Lan nggawe link ora aneh. Nanging titik kaping telu nuduhake kabeh operasi sing ditindakake kanthi urutan sing ketat. Aku dudu penggemar cramming kanggo tes, nanging sampeyan kudu ngerti proses iki lan sampeyan kudu apal urutan operasi iki.. Nalika kita ngomong babagan proses nggawe obyek ing pawulangan sadurunge, sampeyan durung ngerti apa-apa babagan warisan, mula nerangake sawetara perkara dadi masalah. Saiki sampeyan ngerti akeh banget lan pungkasane bisa nimbang pitakonan iki kanthi lengkap :) Dadi titik katelu ujar " Pungkasan, variabel diinisialisasi lan konstruktor diarani. " Nanging apa urutane kabeh kedadeyan kasebut? Kanggo pangerten sing luwih apik, ayo nggawe rong kelas super prasaja - wong tuwa lan bocah:
public class Vehicle {
public static int vehicleCounter = 0;
private String description = "Vehicle";
public Vehicle() {
}
public String getDescription() {
return description;
}
}
public class Truck extends Vehicle {
private static int truckCounter = 0;
private int yearOfManufacture;
private String model;
private int maxSpeed;
public Truck(int yearOfManufacture, String model, int maxSpeed) {
this.yearOfManufacture = yearOfManufacture;
this.model = model;
this.maxSpeed = maxSpeed;
Vehicle.vehicleCounter++;
truckCounter++;
}
}
Kelas kasebut Truckminangka implementasi truk kanthi lapangan sing nuduhake taun, model, lan kecepatan maksimal. Saiki kita pengin nggawe siji obyek kasebut:
public class Main {
public static void main(String[] args) throws IOException {
Truck truck = new Truck(2017, "Scania S 500 4x2", 220);
}
}
Kanggo mesin Java, proses bakal katon kaya iki:
-
Babagan pisanan sing kedadeyan yaiku variabel statis kelas
Vehiclediinisialisasi . Ya, aku ngomongVehiclekelas, oraTruck. Variabel statis diinisialisasi sadurunge konstruktor diarani, lan iki diwiwiti ing kelas induk. Ayo dadi nyoba kanggo verifikasi iki. We nyetelvehicleCounterlapangan ingVehiclekelas witjaksono kanggo 10 lan nyoba kanggo nampilake ing loroVehiclelanTruckkonstruktor.public class Vehicle { public static int vehicleCounter = 10; private String description = "Vehicle"; public Vehicle() { System.out.println(vehicleCounter); } public String getDescription() { return description; } } public class Truck extends Vehicle { private static int truckCount = 0; private int yearOfManufacture; private String model; private int maxSpeed; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println(vehicleCounter); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCount++; } }Kita sengaja nyelehake statement println ing wiwitan konstruktor
Truckkanggo mesthekake yen lapangan truk durung diwiwiti nalikavehicleCounterditampilake.Lan iki asile:
10 10 -
Sawise variabel statis kelas induk diinisialisasi, variabel statis kelas anak diinisialisasi. Ing kasus kita, iki minangka
truckCounterlapangan kelasTruck.Ayo nindakake eksperimen liyane ing ngendi kita bakal nyoba nampilake nilai
truckCounteringTruckkonstruktor sadurunge kolom liyane diwiwiti:public class Truck extends Vehicle { private static int truckCounter = 10; private int yearOfManufacture; private String model; private int maxSpeed; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println(truckCounter); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; } }Nalika sampeyan bisa ndeleng, nilai 10 wis ditugasake kanggo variabel statis nalika
Truckkonstruktor diwiwiti. -
Iku isih durung wektu kanggo konstruktor! Initialization variabel terus. Variabel non-statis saka kelas induk diinisialisasi katelu. Kaya sing sampeyan ngerteni, warisan nggawe rumit proses nggawe obyek, nanging ora ana sing bisa ditindakake: Sampeyan mung kudu ngeling-eling sawetara perkara ing pemrograman :)
Minangka eksperimen, kita bisa nemtokake sawetara nilai awal kanggo
descriptionvariabel ingVehiclekelas, lan banjur ngganti ing konstruktor.public class Vehicle { public static int vehicleCounter = 10; private String description = "Initial value of the description field"; public Vehicle() { System.out.println(description); description = "Vehicle"; System.out.println(description); } public String getDescription() { return description; } }Ayo mbukak
main()metode sing nggawe truk:public class Main { public static void main(String[] args) throws IOException { Truck truck = new Truck(2017, "Scania S 500 4x2", 220); } }Kita entuk asil ing ngisor iki:
Initial value of the description field VehicleIki mbuktekake yen nalika
Vehiclekonstruktor wiwitdescriptionlapangan wis diwenehi nilai. -
Akhire, iku wektu kanggo konstruktor! Luwih tepat, wektu kanggo konstruktor kelas dasar. Iki dijaluk ing langkah kaping papat saka proses nggawe obyek.
Iki uga cukup gampang kanggo verifikasi. Ayo dadi nyoba outputting loro baris kanggo console: siji nang
Vehiclekonstruktor kelas basa, liyane nangTruckkonstruktor. Kita kudu yakin manawa baris ing njeroVehicleditampilake dhisik:public Vehicle() { System.out.println("Hello from the Vehicle constructor!"); } public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println("Hello from the Truck constructor!"); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; }Kita bakal mbukak
main()cara kita lan ndeleng asil:Hello from the Vehicle constructor! Hello from the Truck constructor!Banget. Berarti ora kliru :) ayo maju.
-
Saiki iku wektu kanggo initialization saka kothak non-statis saka kelas anak, IE
Truckkelas kita. Bidang sing langsung ana ing kelas sing bakal ditindakake ora diwiwiti nganti langkah kaping lima! Ngageti, nanging bener :) Maneh, kita bakal nindakake mriksa prasaja - kaya karo kelas induk: kita bakal sawetara nilai awal kanggo variabelmaxSpeedlan ingTruckkonstruktor kita bakal mriksa yen nilai kasebut ditugasake sadurunge konstruktor diwiwiti:public class Truck extends Vehicle { private static int truckCounter = 10; private int yearOfManufacture; private String model; private int maxSpeed = 150; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println("Initial value of maxSpeed = " + this.maxSpeed); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; } }Output konsol:
Initial value of maxSpeed = 150Nalika sampeyan bisa ndeleng, nalika
Truckkonstruktor wiwit,maxSpeedwis padha karo 150! -
Konstruktor
Truckkelas anak diarani.Lan mung ing titik iki, pungkasan kabeh, bakal konstruktor saka kelas kita instantiating bakal disebut!
Mung ing langkah enem lapangan bakal diwenehi nilai sing kita pass minangka bantahan kanggo truk kita.
Kaya sing sampeyan ngerteni, "mbangun" truk, yaiku proses nggawe obyek, ora gampang. Nanging kayane wis dipecah dadi bagean sing paling cilik :)
Yagene penting banget kanggo ngerti proses iki kanthi apik? Mbayangno carane ora dikarepke asil nggawe obyek biasa yen sampeyan ora ngerti persis apa sing kedadeyan "ing hood" :) Saiki wektune bali menyang kursus lan ngrampungake sawetara tugas! Good luck lan ndeleng sampeyan rauh! :)
GO TO FULL VERSION