INTERFACE

Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau constant
). Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method tanpa tubuh.

Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari
class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki
class,  untuk  mengimplementasikan  sifat-sifat  yang  umum.  Dengan  catatan  bahwa
interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil
method  interface dan versi yang  tepat dari method yang akan dieksekusi  tergantung dari
tipe object yang melewati pemanggil method interface.

Kita  akan  menggunakan  interface  jika  kita  ingin  class  yang  tidak  berhubungan
mengimplementasikan  method  yang  sama.  Melalui  interface-interface,  kita  dapat 
menangkap kemiripan diantara class yang  tidak berhubungan  tanpa membuatnya seolah-
olah class yang berhubungan.

Mari  kita  ambil  contoh  class  Line  dimana  berisi method  yang menghitung  panjang  dari
garis dan membandingkan object Line ke object dari class yang sama. Sekarang, misalkan
kita punya  class yang  lain yaitu MyInteger dimana berisi method  yang membandingkan
object MyInteger  ke  object  dari  class  yang  sama.  Seperti  yang  kita  lihat  disini,  kedua
class-class mempunyai method yang mirip dimana membandingkan mereka dari object lain
dalam  tipe  yang  sama,  tetapi  mereka  tidak  berhubungan  sama  sekali.  Supaya  dapat
menjalankan  cara  untuk  memastikan  bahwa  dua  class-class  ini  mengimplementasikan
beberapa  method  dengan  tanda  yang  sama,  kita  dapat  menggunakan  sebuah  interface
untuk hal  ini. Kita  dapat membuat  sebuah  class  interface,  katakanlah  interface Relation
dimana mempunyai  deklarasi method  pembanding.  Relasi  interface  dapat  dideklarasikan
sebagai,

public interface Relation
{
  public boolean isGreater( Object a, Object b);
  public boolean isLess( Object a, Object b);
  public boolean isEqual( Object a, Object b);

Alasan  lain dalam menggunakan  interface pemrograman object adalah untuk menyatakan
sebuah interface pemrograman object tanpa menyatakan classnya. Seperti yang dapat kita
lihat nanti dalam bagian Interface vs class, kita dapat benar-benar menggunakan interface
sebagai tipe data.
  
Pada  akhirnya,  kita  perlu menggunakan  interface  untuk  pewarisan model  jamak  dimana
menyediakan  class  untuk mempunyai  lebih  dari  satu  superclass.  Pewarisan  jamak  tidak
ditunjukkan di Java, tetapi ditunjukkan di bahasa berorientasi object lain seperti C++.

Interface vs. Class Abstract 

Berikut  ini  adalah  perbedaan  utama  antara  sebuah  interface  dan  sebuah  class  abstract:
method  interface  tidak  punya  tubuh,  sebuah  interface  hanya  dapat  mendefinisikan
konstanta  dan  interface  tidak  langsung  mewariskan  hubungan  dengan  class  istimewa
lainnya, mereka didefinisikan secara independent.

Satu ciri umum dari sebuah interface dan class adalah pada tipe mereka berdua. Ini artinya
bahwa sebuah interface dapat digunakan dalam tempat-tempat dimana sebuah class dapat
digunakan.  Sebagai  contoh,  diberikan  class  Person  dan  interface  PersonInterface,  berikut
deklarasi yang benar:

    PersonInterface  pi = new Person();
    Person    pc = new Person();

Bagaimanapun, Anda tidak dapat membuat instance dari sebuah interface. 
Contohnya:

PersonInterface  pi = new PersonInterface(); //COMPILE 
                //ERROR!!!
Ciri  umum  lain  adalah  baik  interface  maupun  class  dapat  mendefinisikan  method.
Bagaimanapun,  sebuah  interface  tidak punya  sebuah kode  implementasi  sedangkan  class
memiliki salah satunya.