Java-yň her täze wersiýasy öňki görnüşlerinden tapawutlanýar. Ine, üstümizdäki materialdan üýtgeşmeleriň bir mysaly: Java 5-den ozal
Edil şonuň ýaly-da, Java 8 Java 7-den ep-esli tapawutlanýar. Leksiýalarymyzyň köpüsi diliň 7-nji wersiýasynda ýazylýar, ýöne elbetde möhüm täzeliklere üns bermeris. Bu leksiýadaky interfeýsler hakda gürleşýändigimiz üçin, bir täzelenmä seredeliň - interfeýslerdäki başlangyç usullar . Interfeýsiň durmuşa geçirilmeýändigini eýýäm bilýärsiňiz . Onuň wezipesi, ony durmuşa geçirýän ähli obýektleriň nähili hereket etmelidigini beýan etmekdir . Developöne köplenç döredijiler ähli synplarda usulyň durmuşa geçirilmegi birmeňzeş bolan ýagdaýlara duş geldiler. Köne awtoulag mysalymyza seredeliň:
enum
dilde hiç zat ýokdy.
public interface Car {
public void gas();
public void brake();
}
public class Sedan implements Car {
@Override
public void gas() {
System.out.println("Газ!");
}
@Override
public void brake() {
System.out.println("Тормоз!");
}
}
public class Truck implements Car {
@Override
public void gas() {
System.out.println("Газ!");
}
@Override
public void brake() {
System.out.println("Тормоз!");
}
}
public class F1Car implements Car {
@Override
public void gas() {
System.out.println("Газ!");
}
@Override
public void brake() {
System.out.println("Тормоз!");
}
}
Siziň pikiriňizçe bu kod bilen baglanyşykly esasy mesele näme? Şol bir koduň bir toparyny ýazandygymyzy gören bolsaňyz gerek! Bu mesele programmirlemekde köp duş gelýär we öňüni almaly. Anotherene bir zat, Java 8 çykmazdan ozal ýörite çözgüt wariantlary ýokdy. Bu wersiýa çykanda, başlangyç usullary kesgitlemek we olary interfeýsiň içinde durmuşa geçirmek mümkin boldy! Ine, bu nähili edildi:
public interface Car {
public default void gas() {
System.out.println("Газ!");
}
public default void brake() {
System.out.println("Тормоз!");
}
}
public class Sedan implements Car {
}
public class Truck implements Car {
}
public class F1Car implements Car {
}
gas()
Indi ähli maşynlar üçin birmeňzeş bolan usullar brake()
interfeýsiň içine girýär we dublikat kod gerek däl. Mundan başga-da, usullar synplaryň hersinde bar!
public class Main {
public static void main(String[] args) {
F1Car f1Car = new F1Car();
Sedan sedan = new Sedan();
Truck truck = new Truck();
truck.gas();
sedan.gas();
f1Car.brake();
}
}
Bir usul bilen 100 synp bar bolsa gas()
, ýöne olaryň 99-synyň özüni alyp barşy näme? Bu hemme zady weýran edýär we bu ýagdaýda deslapky usul işlemezmi? Elbetde ýok :) Interfeýsleriň esasy usullary ýok edilip bilner.
public class UnusualCar implements Car {
@Override
public void gas() {
System.out.println("Эта машина газует по-другому!");
}
@Override
public void brake() {
System.out.println("Эта машина тормозит по-другому!");
}
}
Beýleki 99 görnüşli maşynlaryň hemmesi deslapky usuly durmuşa geçirer we synp UnusualCar
- kadadan çykma - umumy suraty bozmaz we özüni alyp barşyny ýuwaşlyk bilen kesgitlär. Interfeýslerde köp miras Öňem bilşiňiz ýaly, Java-da köp miras ýok. Munuň köp sebäbi bar, olara aýratyn leksiýada jikme-jik serederis. Beýleki dillerde, mysal üçin, C ++ -da, başga ýol. Birnäçe miras bolmasa, çynlakaý mesele ýüze çykýar: şol bir obýektiň dürli aýratynlyklary we "özüni alyp barşy" bolup biler. Durmuşdan mysal: ene-atalarymyz üçin biz çagalar, mugallymlar üçin talyplar, lukmanlar üçin hassalar. Durmuşda dürli rollarda çykyş edýäris we şoňa görä başgaça hereket edýäris: ýakyn dostlarymyzdan tapawutlylykda mugallymlar bilen başgaça gürleşeris. Geliň, bu ýagdaýy koda öwürmäge synanyşalyň. Iki synpymyz bar diýip göz öňüne getireliň: Howuz we guş. Howuz üçin ýüzýän guşlar, uçuş üçin bolsa uçýan guşlar gerek. Munuň üçin iki sany esasy synp döretdik - FlyingBird
we Waterfowl
.
public class Waterfowl {
}
public class FlyingBird {
}
FlyingBird
Şoňa görä-de, synplaryna miras galan guşlary guşlara we howuzlara - aşak inýänleri ibereris Waterfowl
. Hemme zat ýönekeý ýaly. Emma ördeki bir ýerde kesgitlemeli bolsa näme ederis? Ol hem ýüzýär, hem uçýar. Emma biziň köp mirasymyz ýok. Bagtymyza, Java interfeýsleriň köp ýerine ýetirilmegini üpjün edýär. Bir synp birnäçe ene-atadan miras alyp bilmese, birnäçe interfeýsi durmuşa geçirmek aňsat! Ördekimiz hem uçup, hem ýüzüp biler :) Islenýän netijäni gazanmak üçin sapaklary däl-de, FlyingBird
interfeýsleri ulanmak ýeterlikdir .Waterfowl
public class Duck implements FlyingBird, Waterfowl {
//методы обоих интерфейсов легко объединяются в одном классе
@Override
public void fly() {
System.out.println("Летим!");
}
@Override
public void swim() {
System.out.println("Плывем!");
}
}
Munuň netijesinde programmamyz çeýe synp dolandyryşyny saklaýar we deslapky usullary durmuşa geçirmek bilen obýektleriň özüni alyp barşyny kesgitlemek ukybymyz çäksiz bolýar! :)
GO TO FULL VERSION