CodeGym /Blog Jawa /Acak /Cara standar ing antarmuka
John Squirrels
tingkat
San Francisco

Cara standar ing antarmuka

Diterbitake ing grup
Saben versi Jawa anyar beda karo sing sadurunge. Ing ngisor iki tuladha ewah-ewahan materi ingkang sampun kita bahas: sakdurunge Jawa 5, basane ora ana enums. Cara standar ing antarmuka - 1Kajaba iku, Jawa 8 beda banget karo Jawa 7. Umume pelajaran kita ditulis kanggo versi 7 basa, nanging mesthi ora bakal nglirwakake inovasi penting. Amarga kita wis ngomong babagan antarmuka ing wulangan iki, kita bakal nimbang siji nganyari - metode standar ing antarmuka . Sampeyan wis ngerti manawa antarmuka ora nindakake prilaku . Tugase yaiku njlèntrèhaké prilaku sing kudu diduweni kabeh obyek sing ngleksanakake. Nanging pangembang kerep nemoni kahanan sing implementasine metode padha ing kabeh kelas. Ayo nimbang conto mobil lawas kita:

public interface Car {

   public void gas();

   public void brake();
}
public class Sedan implements Car {

   @Override
   public void gas() {
       System.out.println("Gas!");
   }

   @Override
   public void brake() {
       System.out.println("Brake!");
   }
}


public class Truck implements Car {

   @Override
   public void gas() {
       System.out.println("Gas!");
   }

   @Override
   public void brake() {
       System.out.println("Brake!");
   }
}


public class F1Car implements Car {
   @Override
   public void gas() {
       System.out.println("Gas!");
   }

   @Override
   public void brake() {
       System.out.println("Brake!");
   }
}
"Ing mratelakake panemume, apa masalah utama karo kode iki? Sampeyan mbokmenawa ngeweruhi sing kita wrote Bunch saka kode bola-bali! Masalah iki umum ing program, lan sampeyan kudu ngindhari iku. Iku prakara liyane sing solusi tartamtu ora ana sadurunge. Java 8 dirilis. Kanthi versi iki teka kemampuan kanggo nemtokake cara standar lan ngleksanakake langsung ing antarmuka! Mangkene carane sampeyan nindakake:

public interface Car {

   public default void gas() {
       System.out.println("Gas!");
   }

   public default void brake() {
       System.out.println("Brake!");
   }
}

public class Sedan implements Car {

}

public class Truck implements Car {

}

public class F1Car implements Car {

}
Saiki gas()lan brake()cara, sing padha kanggo kabeh mobil, wis dipindhah menyang antarmuka. Ora perlu kode bola-bali. Apa maneh, metode kasebut kasedhiya ing saben kelas!

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();
   }
}
Apa yen ana 100 kelas kanthi gas()metode kasebut, nanging mung 99 sing duwe prilaku sing padha? Apa sing ngrusak kabeh lan nggawe metode standar ora cocog kanggo kahanan iki? Mesthi, ora :) Cara standar ing antarmuka bisa diganti kanthi cara sing padha karo sing biasa.

public class UnusualCar implements Car {
   @Override
   public void gas() {
       System.out.println("This car accelerates differently!");
   }

   @Override
   public void brake() {
       System.out.println("This car decelerates differently!");
   }
}
Kabeh 99 jinis mobil liyane bakal ngleksanakake cara standar, lanUnusualCarkelas, sing pangecualian, ora bakal ngrusak gambar sakabèhé lan tenang nemtokake prilaku dhewe. Multiple warisan antarmuka. Kaya sing wis dingerteni, Jawa ora ndhukung warisan pirang-pirang. Ana akeh alasan kanggo iki. Kita bakal nliti kanthi rinci ing pawulangan sing kapisah. Basa liya, kayata C ++, ndhukung. Tanpa akeh warisan, masalah serius muncul: siji obyek bisa duwe sawetara karakteristik lan 'prilaku' sing beda. Iki conto saka urip: kita anak kanggo wong tuwa, murid kanggo guru, lan pasien kanggo dokter. Ing urip, kita njupuk peran sing beda-beda lan, kanthi mangkono, tumindak kanthi beda: jelas, kita ora bakal ngomong karo guru kanthi cara sing padha karo kanca sing cedhak. Coba terjemahake iki menyang kode. Mbayangno yen kita duwe rong kelas: Kolam lan Aviary. Kanggo blumbang, kita butuh unggas banyu; kanggo aviary, kita kudu manuk mabur. Kanggo nindakake iki, kita wis nggawe rong kelas dhasar:FlyingBirdlan Waterfowl.

public class Waterfowl {
}

public class FlyingBird {
}
Dadi, kita bakal ngirim manuk sing kelas warisan FlyingBirdmenyang aviary, lan kita bakal ngirim manuk sing warisan Waterfowlmenyang blumbang. Iku kabeh katon banget prasaja. Nanging ing ngendi kita ngirim bebek? Iku nglangi lan mabur. Lan kita ora duwe akeh warisan. Untunge, Jawa ndhukung sawetara implementasine antarmuka. Sanadyan kelas ora bisa oleh warisan sawetara tuwane, iku bisa gampang ngleksanakake sawetara antarmuka! Bebek kita bisa dadi manuk mabur lan unggas banyu :) Kita mung kudu nggawe FlyingBirdlan Waterfowlantarmuka tinimbang kelas kanggo entuk asil sing dikarepake.

public class Duck implements FlyingBird, Waterfowl {

   // The methods of both interfaces can be easily combined into one class

   @Override
   public void fly() {
       System.out.println("Fly!");
   }

   @Override
   public void swim() {

       System.out.println("Swim!");
   }
}
Mulane, program kita nahan keluwesan kelas, lan, kanthi kombinasi metode standar, kemampuan kita kanggo nemtokake prilaku obyek dadi meh ora ana watesan! :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION