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";
}
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);
}
{ 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.

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