Kamis, 01 November 2012

Abstract class, Interface, Inner Class



ABSTRACT CLASS,INTERFACE,INNER CLASS


A.Abstract Class

Abstract Class merupakan Class yang khusus dibuat untuk keperluan inheritance. Tujuan dari pembuatan abstract class ini ialah untuk membuat definisi umum bagi class-class yang akan menjadi turunan darinya.Abstract class dalam java digunakan untuk mendeklarasikan karakteristik umum dari subclass. Abstract class tidak bisa diinstansiasi sama halnya dengan kelas interface. abstract class hanya bisa digunakan sebagai super class, tapi juga bisa diturunkan dari class abstract lainnya,abstract public void cetak();

 Beberapa hal yang perlu diperhatikan adalah sebagai berikut:
1.Class abstrak tidak dapat dibuatkan instan atau objeknya menggunakan keyword    new.
2.Sebuah class dapat dideklarasikan sebagai class abstrak walaupun tidak memiliki method abstrak.
3.Variabel dengan tipe class abstrak tetap bisa diciptakan, tetapi harus refer ke subclass dari class abtrak tersebut yang tentunya tidak abstrak.
Objek class abtrak tidak dapat diciptakan menggunakan keyword new secara langsung. Apabila kita terpaksa ingin menciptakan object class abtrak tanpa membuat subclass kongkritnya, maka kita harus mengimplementasikan method – method abstraknya secara langsung saat deklarasi.
 Untuk mendeklarasikan sebuah abstract class digunakan keyword abstract, [abstract] class [class_name] Sebuah abstract class pada dasarnya tidak jauh beda dengan class lainnya, yakni juga berisi method yang menggambarkan carakteristik dari kelas abstract tersebut, bedanya yakni sebuah abstract class bisa berisi method tanpa diimplementasikan artinya sebuah method tanpa body, method seperti ini disebut method abstract. untuk pendeklarasiannya digunakan keyword abstract.
Untuk membuatnya kita cukup menambahkan keyword abstract di depan class yang kita definisikan.
abstract class ClassBasis
{
}
Definisi umum ini bisa jadi sudah mempunyai method yang dibuat khusus untuk diturunkan.
abstract class ClassBasis
{
public void method1(ref string s)
{
s = 
"this is a sample of method";
}
}
Abstract class bisa juga mempunyai sebuah abstract method, yang baru dibuatkan method implementasinya di class turunan.
abstract class ClassBasis
{
 public abstract void method2(ref string s);
}
Abstract Class tidak bisa diinstansiasi. Abstract method tidak mempunyai implementasi, sehingga penulisannya dilakukan hanya dengan mengikutkan semikolon, bukan blok method {} seperti biasanya. Abstract method ini bisa digunakan oleh Class turunannya dengan melakukan override.
class ChildBasis : ClassBasis
{
public override void method2(ref string s)
{
s = "this is a child implement method";
}
}
Pada class turunan dari abstract class, melalui IDE VS2005 kita bisa membuat implementasi methodnya dengan mengarahkan kursor pada nama class di belakang class turunan, dan memilih menu implements Abstract Class, sehingga abstract method di Class Induk akan ditulis secara otomatis template-nya di Class turunan.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMnvXJXOy9lccA3abNiRlbYoqzOJpnn2hukoZON2vWnlxLqLFFsJ3Ia2O6PBjdeqMNNrkzROb4EAYMmG0H_RcDvduMnowzyqOeIqy40wtgegrK2a0tNpUZIxtIVRYuSK-Gdvytfz2viI/s320/buku_tes.jpgtemplate kode yang dihasilkan akan memudahkan penulisan implementasi yang kita inginkan, seperti di bawah ini:
class TBasis : ClassBasis
{
public override void method2(ref string s)
{
throw new Exception("The method or operation is not implemented.");
}
}



B.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.

Kenapa Kita Memakai 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,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 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.

Untuk memahami lebih mudah, interface sekumpulan dari method-method yang dibuat tapi belum ada operasi di dalam tubuh method tersebut, interface ini bisa diturunkan atau diwariskan kepada class yang ingin memakai method yang ada dalam masing-masing interface tersebut dengan keyword extends [interface yang didefinisikan]. Dan juga sebuah class mengimplementasi 1 interface yang sudah dibuat dengan keyword implements.

Ciri-ciri dari interface adalah sebagai berikut..
·         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.
·         Tidak bisa membuat instance atau objek baru dari sebuah interface.
·         Ciri umum lain adalah baik interface maupun class dapat mendefinisikan method. Bagaimanapun, sebuah interface tidak punya sebuah kode implementasi sedangkan class memiliki salah satunya.

1
public interface [InterfaceName]
2
{

3
//beberapa method tanpa isi
4
}

Seperti penggunaan interface pada salah satu class interface berikut.

01
public interface RemoteAllInOne {
02


03
 public void pindahChannel(int channel);
04


05
 public void perbesarVolume(int kpsts);
06


07
 public void perkecilVolume(int kpsts);
08


09
 public void perkecilZoom(int kpsts);
10


11
 public void perbesarZoom(int kpsts);
12
}

Setelah itu kita menggunakan class yang akan mengimplementasi setiap method yang ada pada class interface RemoteAllInOne.

01
public class BenQ implements RemoteAllInOne {
02


03
 String[] menuTV = {"ANTV", "INDOSIAR", "TRANS-TV", "TPI", "RCTI", "SCTV", "GLOBAL-TV"};
04


05
 public void pindahChannel(int channel) {
06
 System.out.println("LCD BENQ Pindah Channel ke - " + this.menuTV[channel]);

07
 }
08


09
 public void perbesarVolume(int kpsts) {
10
 System.out.println("LCD BENQ Perbesar Vol : " +kpsts);

11
 }
12


13
 public void perkecilVolume(int kpsts) {
14
 System.out.println("LCD BENQ Pekecil Vol : " + kpstss);

15
 }
16


17
 public void perkecilZoom(int kpsts) {
18
 System.out.println("LCD BENQ Pekecil Zoom : " + kpsts);

19
 }
20


21
 public void perbesarZoom(int kpsts) {
22
 System.out.println("LCD BENQ Pebesar Zoom : " + kpsts);

23
 }
24
}

Setelah itu kita membuat class yang berfungsi sebagai perantara pemanggil method sebelum kita masuk ke class main, atau pembuatan instance baru sebuah objek supaya dapat digunakan setiap interface yang dibuat tadi.

01
public class MyRemoteAllInOne {
02
 public void sendRequest(int aksi, RemoteAllInOne rmt, int tombol){

03
 switch(aksi){
04
 case 1:

05
 rmt.pindahChannel(tombol);
06
 break;

07
 case 2 :
08
 rmt.perkecilVolume(tombol);

09
 break;
10
 case 3 :

11
 rmt.perbesarVolume(tombol);
12
 break;

13
 case 4 :
14
 rmt.perkecilZoom(tombol);

15
 break;
16
 case 5 :

17
 rmt.perbesarZoom(tombol);
18
 break;

19
 }
20
 }

21
}

Dan berikut adalah class main yang dipakai waktu pengeksekusian program.

01
public class Tester {
02


03
 /**
04
 * @param args the command line arguments

05
 */
06
 public static void main(String[] args) {

07
 Ephson ep = new Ephson();
08
 BenQ bq = new BenQ();

09
 Mitshubishi mt = new Mitshubishi();
10
 MyRemoteAllInOne my = new MyRemoteAllInOne();

11
 my.sendRequest(1, mt, 4);
12
 my.sendRequest(1, ep, 5);



13
 my.sendRequest(1, bq, 6);
14
 my.sendRequest(2, mt, 4);

15
 }
16
}


C.INNER CLASS
Inner Class adalah suatu Class yang didefinisikan di dalam Class lain. Dengan kata lain, Inner Class adalah anggota (member) dari Class lain, sama halnya seperti variable dan method. Hal ini mengakibatkan instance dari Inner Class dapat mengakses /berbagi dengan instance dari outer Class-nya. Instance dari Inner Class dapat mengakses semua member dari outer Class-nya, bahkan yang private.
Di buku-buku disebutkan ada 4 jenis inner class, yaitu :

1. “Regular” Inner class
2. Method-local inner class
3. Anonymous inner class.
4. Static nested classes

1. “Regular” Inner class
·            Kata “Regular” di atas memiliki maksud bahwa inner class yang dibahas di     sini adalah inner class yang bukan static / method-local / anonymous.
·            Inner class didefinisikan (ditulis) di dalam kurung kurawal dari outer class.
·            Instance inner class memiliki akses ke semua member dari outer class (termasuk member outer class yang ber access modifier private).
·            Sebuah inner class tidak dapat memiliki member static.
·            Untuk membuat instance dari inner class, kita harus memiliki instance dari outer class terlebih dahulu. Tidak ada  pengecualisan untuk aturan ini.
·            Untuk membuat instance dari inner class, terdapat 2 cara, yaitu :
1.      Dari dalam outer class
2.      Dari luar outer class

Maksud dari membuat instance inner class dari dalam outer  class tidak termasuk membuat instance dari dalam method static. Sebab method static tidak dapat menunjuk sesuatu yang tidak static. Untuk membuat instance inner class dari dalam method static, maka dipergunakan cara seperti ketika membuat instance inner class dari luar outer class.
·            Aturan inner class dalam hal mereferensi dirinya sendiri atau instance dari outer class adalah sebagai berikut :
1.  Untuk merujuk pada dirinya sendiri (instance dari inner class) dari dalam inner   class, dapat digunakan referensi this atau NamaOuterClass.NamaInnerClass.this.
2.  Untuk merujuk pada instance dari outer classnya dari dalam inner class, dapat digunakan referensi NamaOuterClass.this.
·            Modifier-modifier berikut dapat diberikan pada inner class :
1.  final
2.  abstract
3.  public
4.  protected
5.  private
6.  static (tapi dengan modifier ini, maka akan menjadi static nested class, bukan inner class).
7.  strictfp


2. Method-Local Inner Class
       Method-local inner class adalah inner class yang dideklarasikan di dalam method.
       Mendeklarasikan method-local inner class tidak berarti kita membuat instance dari  class tersebut. Jadi, sebelum kita menggunakan inner class tersebut, kita harus membuat instancenya dari suatu tempat di dalam method dan setelah definisi inner class tersebut.
·            Method-local inner class hanya dapat diinstansiasi dari dalam method yang mendefinisikan method-local inner class tersebut.

·            Instance method-local inner class memiliki akses ke semua member dari outer class (termasuk member outer class yang ber access modifier private).  
·            Instance dari method-local inner class tidak dapat mengakses local variabel (termasuk parameter) dari method dimana method-local inner class tersebut didefinisikan. Kecuali bila variabel tersebut bermodifier final.
·            Method-local inner class yang didefinisikan di dalam static method tidak dapat mengakses non-static member dari outer classnya
·            Modifier-modifier yang dapat diberikan pada method-local inner class adalah :

1.      abstract (tidak dapat digabung dengan final)
2.      final (tidak dapat digabung dengan abstract)


3. Anonymous Inner Class
         Anonymous inner class adalah suatu inner class yang dideklarasikan tanpa nama kelas.
         Anonymous inner class pasti adalah salah satu dari 2 hal berikut :
1.      Subclass dari suatu class yang telah dideklarasikan
2.      Kelas implementasi dari suatu interface
         Suatu anonymous inner class tidak dapat secara bersamaan menjadi subclass dari class yang telah dideklarasikan dan juga sebagai kelas implementasi dari suatu interface.
         Tujuan utama dari anonymous inner class adalah mengoverride satu atau lebih method dari super classnya atau mengimplement semua method dari suatu interface.
         Anonymous inner class tidak dapat mengimplement lebih dari sebuah interface.
         Anonymous inner class selalu dibuat sebagai bagian dari suatu statement.
·            Anonymous inner class adalah salah satu bentuk dari polymorphisme, oleh karena itu, method yang dapat dipanggil dari anonymous inner class adalah method yang dideklarasikan di super class atau interfacenya (meskipun di dalam anonymous inner class dapat dideklarasikan method-method yang tidak ada di super class atau interfacenya).
Anonymous inner class dapat diletakkan sebagai argument dari suatu method.


4. Static nested class
·            Static nested class adalah inner class dengan modifier static.
·            Static nested class sebenarnya bukan inner class, static nested class hanyalah top-level class yang di sarangkan di dalam class lain.
·            Karena static, maka untuk membuat instance dari static nested class tidak diperlukan instance dari outer classnya. (tidak seperti regular inner class ataupun method-local inner class
·            Cara instansiasi static nested inner class adalah :
NamaOuterClass.NamaStaticNestedClass varRef = new NamaOuterClass.NamaStaticNestedClass()
Static nested class tidak dapat mengakses non-static member dari outer classnya.






Tidak ada komentar:

Posting Komentar