Salam! Öňki leksiýalarda miras düşünjesine eýýäm birnäçe gezek duş geldik. Bu gün bu mowzuga-da degip geçeris, ýöne gaty çuňňur däl. Soňra bu barada jikme-jik leksiýa bolar, ýöne bu gün diňe amaly mysallara serederis we Java-da bir gyzykly operator bilen tanyşarys.
Java mirasy
Onda miras näme? Miras , programmirlemekde, şol sanda Java-da bar bolan birine esaslanýan täze synpy suratlandyrmaga mümkinçilik berýän mehanizmdir. Nesil synpy soňra ene synpyň meýdanlaryna we usullaryna girip biler. Näme üçin bu zerur bolup biler? Mysal üçin, programmada awtoulaglaryň birnäçe synpyny döretmelidigini göz öňüne getiriň: uckük awtoulag, ýaryş, Sedan, pikap we ş.m. Kod ýazmaga başlamazdanam, bu synplaryň umumylyklarynyň köpdügini anyk bilýärsiňiz: ähli awtoulaglaryň model ady, öndürilen ýyly, hereketlendirijiniň ululygy, iň ýokary tizlik we ş.m. (hemmesiniň tigirleriniň we beýleki bölekleriniň bardygyny aýtmaly däl). Şeýle ýagdaýda edip bilersiňiz:- Bu meýdanlary her synpda dörediň we döredilende täze awtoulag synplaryna goşuň
- Machineshli maşynlar üçin umumy meýdanlary ene synpyna geçiriň
Car
we aýratyn maşynlaryň ähli synplaryCar
sözüň ulanylmagyndan miras alýar .
public class Car {
private String model;
private int maxSpeed;
private int yearOfManufacture;
public Car(String model, int maxSpeed, int yearOfManufacture) {
this.model = model;
this.maxSpeed = maxSpeed;
this.yearOfManufacture = yearOfManufacture;
}
}
public class Truck extends Car {
public Truck(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
public class Sedan extends Car {
public Sedan(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
Iň bolmanda, koduň gereksiz köpeldilmeginden gaça durduk we programmalar ýazylanda hemişe ymtylmaly zadymyz. Mundan başga-da, bizde ýönekeý we düşnükli synp gurluşy bar: ähli maşynlara umumy meýdanlar bir synpda ýerleşdirilýär. Mysal üçin, ýük awtoulaglarynda beýleki awtoulaglarda ýok belli bir meýdan bar bolsa, olary yglan edip bolar Truck
. Usullarda-da edil şonuň ýaly. Carshli awtoulaglarda düşündirip boljak umumy häsiýet bar: ulagy, gaz / tormoz we ş.m. Bu umumy usullar umumy synpda ýerleşdirilip bilner Car
we her bir aýratyn görnüşiň aýratyn häsiýeti nesil synplarynda beýan edilip bilner.
public class Car {
public void gas() {
//...gas
}
public void brake() {
//...brake
}
}
public class F1Car extends Car {
public void pitStop() {
//...only racing cars make pit stops
}
public static void main(String[] args) {
F1Car formula1Car = new F1Car();
formula1Car.gas();
formula1Car.pitStop();
formula1Car.brake();
}
}
Carshli awtoulaglaryň umumy usullaryny synpa geçirdik Car
. Formöne Formula 1 ýaryş awtoulaglaryny suratlandyrýan mirasdüşer synpynda F1Car
diňe ýaryşda amala aşyrylýan we aýratyn hereketleri bilen tapawutlanýan çukur duralgalary (awtoulagyň gyssagly hyzmaty üçin duralgalar).
Java mysal operatory
Obýektiň synp esasynda döredilendigini ýa-da ýokdugyny barlamak üçin Java-da ýörite operator bar -instanceof
. true
Synag dogry bolsa ýa-da false
netije ýalňyş bolsa , bahany yzyna gaýtaryp berýär . Mysal hökmünde awtoulag synplarymyzy ulanyp nähili işleýändigini göreliň:
public class Truck extends Car {
public static void main(String[] args) {
Truck truck = new Truck();
System.out.println(truck instanceof Car);
}
}
Çykyş: dogry Operatoryň kömegi bilen barlanyldy instanceof
, true
sebäbi synpda bir obýektimiz bar Truck
we ähli ýük awtoulaglary awtoulag. Bu synp Truck
synpyň neslidir Car
, şonuň üçin ähli ýük awtoulaglary umumy ene-atanyň - awtoulagyň esasynda döredilýär. Operatora üns beriň instanceof
: usul däl-de, operator bolany üçin nokat bolmazdan ýazylýar (“Synpyň obýekti”). Başgaça synap göreliň:
public static void main(String[] args) {
Car car = new Car();
System.out.println(car instanceof Truck);
}
Çykyş: ýalan Synp Car
we şoňa görä-de onuň obýekti synpdan gelenok. Truck
Allhli ýük awtoulaglary awtoulag, ýöne awtoulaglaryň hemmesi ýük däl. Obýektler Car
synpyň esasynda döredilmeýär Truck
. Moreene bir mysal:
public static void main(String[] args) {
Car car = new Car();
Truck truck = new Truck();
System.out.println(car instanceof Object && truck instanceof Object);
}
Çykyş: Hakyky Bu ýerdäki logika hem ýönekeý: Java-daky ähli synplar, şol sanda döreden synplaryňyz bir synpdan gelýär Object
(ýazmasaňyz, obýekti giňeldýär - bu mehanizm olarda doly däl). Näme üçin bu peýdaly bolup biler we haýsy ýagdaýlarda? Operatoryň iň köp ulanylýan instanceof
usuly ýok etmek usulydyr equals()
. Mysal üçin, usulyň equals
synpda nähili durmuşa geçirilýändigi String
:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
Geçirilen obýekt bilen setiri deňeşdirmezden ozal, usul barlanýar: geçen obýekt aslynda setirmi? Diňe şondan soň iki jisimiň häsiýetlerini deňeşdirip başlaýar. Bu barlag bolmasa, gymmaty we uzynlygy meýdanlary bolan islendik obýekti usula geçirip, ony setir bilen deňeşdirip bilersiňiz , bu, elbetde, ýalňyş bolar.
GO TO FULL VERSION