JavaRush /Blog Jawa /Random-JV /Cara standar ing antarmuka

Cara standar ing antarmuka

Diterbitake ing grup
Saben versi Jawa anyar beda karo versi sadurunge. Ing ngisor iki tuladha owah-owahan saka materi sing kita bahas: Sadurunge Jawa 5, ora ana enum's ing basa.
Cara standar ing antarmuka - 1
Mangkono uga, Jawa 8 beda banget karo Jawa 7. Umume ceramah kita ditulis nganggo basa versi 7, nanging, mesthi, kita ora bakal nglirwakake inovasi penting. Awit kita ngomong babagan antarmuka ing kuliah iki, ayo goleki siji nganyari - metode standar ing antarmuka . Sampeyan wis ngerti manawa antarmuka ora diimplementasikake . Tugase kanggo njlèntrèhaké prilaku apa sing kudu diduweni kabeh obyek sing ngleksanakake . Nanging cukup asring pangembang nemoni kahanan sing implementasine metode ing kabeh kelas padha. Ayo ndeleng 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("Газ!");
   }

   @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("Тормоз!");
   }
}
Apa sampeyan mikir masalah utama karo kode iki? Sampeyan mbokmenawa ngeweruhi sing kita wrote Bunch saka kode padha! Masalah iki umum ing program lan kudu dihindari. Bab liyane yaiku sadurunge release Java 8 ora ana pilihan solusi khusus. Nalika versi iki metu, dadi bisa kanggo netepake cara gawan lan ngleksanakake langsung ing antarmuka! Mangkene carane ditindakake:
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 {

}
Saiki cara gas()lan brake(), sing padha kanggo kabeh mesin, kalebu ing antarmuka, lan kode duplikat ora dibutuhake. Kajaba iku, cara 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();
   }
}
Kepiye yen ana 100 kelas kanthi metode gas(), nanging mung 99 sing duwe prilaku sing padha? Iki ngrusak kabeh, lan cara standar ora bisa digunakake ing kasus iki? Mesthi ora :) Cara standar antarmuka bisa diganti.
public class UnusualCar implements Car {
   @Override
   public void gas() {
       System.out.println("Эта машина газует по-другому!");
   }

   @Override
   public void brake() {
       System.out.println("Эта машина тормозит по-другому!");
   }
}
Kabeh 99 jinis mesin liyane bakal ngetrapake metode standar, lan kelas UnusualCar- kajaba - ora bakal ngrusak gambar sakabèhé lan kanthi tenang bakal nemtokake prilaku. Multiple Inheritance in Interface Kaya sing wis dingerteni, ora ana pirang-pirang warisan ing Jawa. Ana akeh alasan kanggo iki, kita bakal nliti kanthi rinci ing kuliah sing kapisah. Ing basa liyane, contone, ing C ++, iku cara liyane. Tanpa sawetara warisan, masalah serius muncul: obyek sing padha bisa duwe sawetara karakteristik lan "prilaku" sing beda. Tuladha saka urip: kanggo wong tuwa kita dadi bocah, kanggo guru kita dadi murid, kanggo dokter kita dadi pasien. Ing urip, kita katon ing peran beda lan, miturut, tumindak beda: kita temenan bakal ngomong karo guru beda saka kanca cedhak. Ayo nyoba nerjemahake kahanan iki dadi kode. Coba bayangake yen kita duwe rong kelas: Kolam lan Aviary. Kanggo kolam sampeyan butuh manuk sing nglangi, lan kanggo aviary sampeyan butuh sing mabur. Kanggo nindakake iki, kita nggawe rong kelas dhasar - FlyingBirdlan Waterfowl.
public class Waterfowl {
}

public class FlyingBird {
}
Patut, kita bakal ngirim menyang aviary manuk sing kelas saka warisan FlyingBird, lan menyang blumbang - sing mudhun saka Waterfowl. Kabeh katon prasaja. Nanging apa sing bakal ditindakake yen kita kudu ngenali bebek ing endi wae? Dheweke nglangi lan mabur. Nanging kita ora duwe akeh warisan. Untunge, Jawa nyedhiyakake macem-macem implementasi antarmuka. Yen kelas ora bisa warisan saka sawetara tuwane, ngleksanakake sawetara antarmuka gampang! Bebek kita bisa mabur lan nglangi :) Cukup nggunakake antarmuka FlyingBirdtinimbang Waterfowlkelas kanggo entuk asil sing dikarepake.
public class Duck implements FlyingBird, Waterfowl {

   //методы обоих интерфейсов легко объединяются в одном классе

   @Override
   public void fly() {
       System.out.println("Летим!");
   }

   @Override
   public void swim() {

       System.out.println("Плывем!");
   }
}
Thanks kanggo iki, program kita nahan manajemen kelas sing fleksibel, lan ing kombinasi karo implementasine 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