Saben versi Jawa anyar beda karo versi sadurunge. Minangka conto owah-owahan saka materi sing wis kita bahas, basa kasebut ora ana enumssadurunge Jawa 5.
Cara standar ing antarmuka - 1
Mangkono, Jawa 8 beda banget karo Jawa 7. Kita ora bakal nglirwakake inovasi penting, mesthi. Awit kita ngomong babagan antarmuka ing wulangan iki, ayo dipikirake siji nganyari basa: metode standar ing antarmuka . Sampeyan wis ngerti manawa antarmuka ora nindakake prilaku . Tujuane kanggo njlèntrèhaké prilaku apa sing kudu ana ing kabeh obyek sing ngleksanakake antarmuka . Nanging pangembang kerep nemoni kahanan sing implementasine metode padha ing kabeh kelas. 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("Gas!");
   }

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


public class Truck implements Car {

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

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


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

   @Override
   public void brake() {
       System.out.println("Brake!");
   }
}
Apa sampeyan mikir masalah utama karo kode iki? Sampeyan mbokmenawa ngeweruhi sing kita wrote Bunch saka duplikat kode! Iki minangka masalah umum ing program lan kudu dihindari. Iku prakara liyane sing ora ana solusi tartamtu sadurunge release saka Jawa 8. Nalika versi sing metu, iku dadi bisa kanggo netepake standar cara lan ngleksanakake langsung nang antarmuka! Mangkene carane 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, mbusak perlu kanggo duplikat kode. Lan 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();
   }
}
Apa yen ana 100 kelas kanthi gas()metode, nanging mung 99 sing kudu duwe prilaku sing padha? Apa sing ngrusak kabeh? Apa cara standar ora bisa digunakake ing kasus iki? Mesthi ora :) Cara antarmuka standar bisa diganti.
public class UnusualCar implements Car {
   @Override
   public void go() {
       System.out.println("This car accelerates differently!");
   }

   @Override
   public void brake() {
       System.out.println("This car slows down differently!");
   }
}
Kabeh liyane 99 jinis mobil bakal nggunakake cara standar, nalika ingUnusualCarkelas minangka pangecualian. Tanpa ngrusak gambar gedhe, kanthi tenang bakal nemtokake prilaku dhewe. Multiple warisan ing antarmuka. Kaya sing wis dimangerteni, ora ana warisan pirang-pirang ing Jawa. Ana akeh alasan kanggo iki. Kita bakal nimbang kanthi rinci ing pawulangan sing kapisah. Ing basa liya, kayata C ++, kahanan kasebut dibalik. Ora ana pirang-pirang warisan sing menehi tantangan serius, amarga obyek sing padha bisa duwe sawetara karakteristik lan prilaku sing beda. Contone, kita anak kanggo wong tuwa, murid kanggo guru, lan pasien kanggo dokter. Ing urip nyata, kita ngisi macem-macem peran lan, kanthi mangkono, tumindak kanthi beda: jelas kita sesambungan karo guru kanthi beda tinimbang karo kanca sing cedhak. Ayo nyoba nerjemahake kahanan iki dadi kode. Coba bayangake yen kita duwe rong kelas: Kolam lan Aviary. Kolam butuh manuk sing nglangi, dene aviary butuh sing mabur. Kanggo makili iki, kita nggawe rong kelas dhasar:FlyingBirdlan Waterfowl.
public class Waterfowl {
}

public class FlyingBird {
}
Mulane, kita bakal ngirim manuk sing duwe warisan FlyingBirdmenyang aviary, dene sing asale Waterfowlbakal menyang blumbang. Kabeh katon langsung. Nanging apa sing kudu ditindakake yen kita kudu nemtokake bebek ing endi wae? Bebek nglangi lan mabur. Nanging kita ora duwe akeh warisan. Untunge, Jawa ndhukung macem-macem implementasi antarmuka. Yen kelas ora bisa oleh warisan akeh tuwane, ngleksanakake macem-macem antarmuka gampang! Bebek kita bisa dadi manuk mabur uga manuk sing nglangi :) Kanggo entuk asil sing dikarepake, kabeh sing kudu ditindakake yaiku nggawe FlyingBirdlan Waterfowlantarmuka tinimbang kelas.
public class Duck implements FlyingBird, Waterfowl {

   // Methods of both interfaces combine easily into one class

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

   @Override
   public void swim() {

       System.out.println("Swimming!");
   }
}
Iki tegese program kita nahan kemampuan kanggo ngatur kelas kanthi fleksibel. Nalika kita gabungke karo cara standar, kemampuan kita kanggo nemtokake prilaku obyek dadi meh ora ana watesan! :)