JavaRush /Java Blog /Random-TK /Interfeýslerde esasy usullar

Interfeýslerde esasy usullar

Toparda çap edildi
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 enumdilde hiç zat ýokdy.
Interfeýslerde esasy usullar - 1
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ň:
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 - FlyingBirdwe 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, FlyingBirdinterfeý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! :)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION