Rangkuman tentang Interface dan Abstract Class – JAVA

Ini adalah rangkuman yang saya terjemahkan dari buku HeadFirst JAVA – 2nd edition. Semoga Bermanfaat….

  • Ketika kita tidak ingin sebuah class dipakai (dengan kata lain, kita tidak ingin seseorang membuat sebuah object baru dari class tersebut) maka tandai class tersebut dengan kata abstract.
  • Sebuah Abstract Class dapat memiliki dua jenis method, Abstract dan non-Abstract Method.
  • Jika sebuah class mempunyai satu abstract Method, class tersebut haruslah ditandai dengan kata abstract.
  • Sebuah Abstract Method tidak mempunyai “badan”, dan deklarasinya diakhiri dengan titik-koma (bukan tanda kurung-keriting).
  • Semua Abstract Method haruslah diimplementasikan di concrete sub-class pertama di dalam pohon Turunan.

Untitled contoh pohon turunan  (Inheritance Tree)

  • Setiap class di Pemrograman JAVA secara langsung atau tidak langsung merupakan sub-class dari class Object (java.lang.Object – Super-Class).
  • Method-method dapat dideklarasikan dengan Argument Object dan/atau tipe return (nilai kembalian).
  • Kita dapat memanggil method pada sebuah Object hanya jika method berada di dalam class (atau interface) tersebut digunakan sebagai tipe referensi variable, bagaimanapun bentuk tipe objectnya. Jadi, sebuah referensi variable dari tipe Object bisa digunakan hanya untuk memanggil method-method yang didefinisikan di dalam Class Object, bagaimanapun tipe Object yang ditunjuk referensi. Perlu dikertahui, referensi variabel berlaku seperti sebuah Remote Control yang menunjuk Object. remote Control tersebut memiliki tombol, Tombol mewakili sebuah Method dari objek yang ditunjuk oleh Referensi (Remote Control).
  • Sebuah referensi Variabel  dari tipe Object tidak dapat ditugaskan ke tipe referensi lainnya tanpa sebuah cast (sebuah objek di dalam tanda kurung biasa). Sebuah cast bisa digunakan untuk menugaskan sebuah referensi variable ke salah satu tipe, tapi pada saat dijalankan (run) cast akan gagal jika object pada lingkaran BUKAN tipe yang cocok dengan cast.

Contoh: // Dog d= (Dog) x.getObject(aDog);

  • Semua objek yang “keluar / dipanggil” dari sebuah ArrayList<Object> sebagai tipe Object (berarti, objek2 tersebut bisa direferensikan hanya dengan sebuah Object Referensi Variabel, kecuali kita menggunakan sebuah cast).
  • Turunan (class) yang lebih dari satu tidak diperbolehkan dalam JAVA, karena masalah2 yang berhubungan dengan istilah “Deadly Diamond of Death”. Hal itu berarti kita hanya bisa meng-EXTEND satu class (misalnya, kita hanya bisa di”BAWAHI” oleh satu SUPERCLASS).
  • Sebuah Interface seperti sebuah Abstract Class murni 100%. Class yang memiliki Interface hanya mendefinisikan sebuah Abstract Method.
  • Cara membuat sebuah interface ialah dengan menggunakan kata interface menggantikan kata class.
  • Implementasi sebuah interface menggunakan kata implements
  • Contoh: Dog implements Pet
  • Kelasmu dapat mengimplementasikan interface yang lebih dari satu.
  • Sebuah class yang mengimplementasikan sebuah interface HARUS mengimplementasikan semua method dari interface, karena semua method dari interface adalah secara implicit merupakan public (dapat diakses oleh class lain) dan abstract.
  • Untuk meminta method versi Superclass dari sebuah subclass yang meng-Override method, dapat menggunakan kata kunci super.Contoh: super.runReport();

Beberapa Istilah dari Programming JAVA

Polimorfisme : Hasil Beda, Cara (Metoda) Sama, Kelas Beda (tentu saja).

Overloading : Metode SAMA, Parameter (Argument) Beda, Kelas SAMA. Tujuan: memudahkan penggunaan method dengan fungsi yang hampir

public void tambah1(){
int a=5, b=10;
System.out.println(“Hasil Pertambahann dari metod tambah1 ke-1 = “+(a+b));
}

public void tambah1(int x, int y){
System.out.println(“Hasil Pertambahann dari metod tambah1 ke-2 = “+(x+y));
}

Overriding : Metode dan Parameter (argument) SAMA, Hasil Beda (Output/nilai return), Kelas BEDA dan secara Inheritance.

Contoh:

class Nama{
public void Sapa(){
System.out.println(“Achmad Cahya Aditya”);
}

class Siapa extends Nama{
public void Sapa(){
System.out.println(“Yesica Dwi Lestari”);
}
}

993754_747172568670237_699908652177029302_n

Make a new variable from Wolf() type

Polymorphism

Contoh dari Polimorfisme

Abstract Class and Method

Abtract Class berfungsi untuk memisahkan antara sub-class dan kelas di atasnya, karena kelas yang berada di atas sub-class (class terakhir dari pohon turunan) tidak diinginkan untuk membuat objek baru (new object) dari tipe kelas abstrak tersebut. Abstract class adalah jenis class yang berada sebelum class concrete.

Abstract class is NO USE, NO VALUE, NO PURPOSE IN LIFE, hanya sebagai class yang mewakili kelas-kelas yang dibawahnya (read: sub-class).

Abtract class bertugas sebagai tempat variable dan method sub-classnya.

Sebuah Abstract Class berarti Class tersebut harus di Extends (have Inheritance).

Sebuah Abstract Method berarti Method tersebut harus di Override.

Abstract Method TIDAK BOLEH berada di Concrete Class. But, Concrete Method BOLEH berada di Abtract Class.

Sebuah Abstract Class tidak memiliki “BADAN”, sehingga class-nya diakhiri dengan tanda TITIK-KOMA (“ ; “) tanpa KURUNG-KERITING (“{}”)

993754_747172568670237_699908652177s029302_n

Contoh kode abstract Class.

Concrete Class and Method

Concrete class ialah class paling ujung di setiap cabang sebuah pohon turunan.

Concrete Class and Method dapat dimodifikasi dari kelas di atasnya (Abstract Class).

Untitled

Object Class

Kelas Objek adalah kelas yang paling ATAS dari semua kelas yang berada di Pohon Turunan Kelas (Inheritance). Kelas Objek ini biasa disebut dengan SUPER-CLASS.

Setiap Class, pada dasarnya, merupakan Extends dari Object Class, tapi compiler telah secara otomatis mengenalinya tanpa kita menuliskan “…Extends Object”.

ArrayList<Class>

ArrayList adalah kelas yang menyimpan suatu Daftar Array (ArrayList) berdasarkan Kelas yang ditulis dalam kurung-siku (“< >”).

Contoh. Ketika kita menulis,

ArrayList<anjing>  DaftarAnjing = new ArrayList<anjing>;

anjing heli = new anjing(); //Membuat anjing (Object) baru yang bernama heli.

DaftarAnjing.add(heli); //add adalah method dari Kelas ArrayList<>.

anjing doggy = DaftarAnjing.get(0); // menyimpan variable dan method yang berada pada Object heli ke Object doggy dengan tipe anjing.

Lalu, bagaimana kalau kita menulis ArrayList<Object> (objej anjing diganti dengan objek Object).

Contoh. Ketika kita menulis,

ArrayList<Object>  DaftarAnjing = new ArrayList<Object>;

anjing heli = new anjing(); //Membuat anjing (Object) baru yang bernama heli.

DaftarAnjing.add(heli); //add (menambahkan ke ArrayList) adalah method dari Kelas ArrayList< >.

anjing doggy = DaftarAnjing.get(0); // menyimpan variable dan method yang berada pada Object heli ke Object doggy dengan tipe anjing. Tapi, kali ini COMPILER tidak akan meng-COMPILE barisan kode ini.

Alasan compiler tidak meng-Compile code terakhir ialah, karena OUTPUT dari ArrayList<Object> berbentuk / berTIPE Object, bukan tipe anjing. Karena itulah, Compiler akan Error saat meng-Compilenya.

Berikut adalah ilustrasi dari ArrayList<Object>,

Untitlsed

Ilustrasi: Object Bola, Ikan, Gitar, dan Mobil ditambahkan ke ArrayList<Object> (ArrayList yang menyimpan objek yang bertipe Object).

Saat kita memanggil / mengeluarkan Object yang berada di dalam ArrayList<Object>, maka Object yang keluar adalah objek yang bertipe Object, bukan lagi bertipe Bola, Ikan, Gitar, maupun Mobil. Hal ini disebabkan karena Compiler tidak Membedakan “KELUARAN” dari ArrayList<Object>.