Java Interface

Diposting oleh Unknown on Selasa, 09 Desember 2008

Dalam java masalah keterbatasan dalam melakukan pewarisan dapat ditanggulangi
dengan teknik interface. Interface dapat digunakan untuk mendefinisikan bentuk
umum dari sebuah template dan kemudian satu atau beberapa abstrak kelas mengimplementasikannya. Sebuah interface hanya berisi deklarasi dari method-method. Untuk mendefinisikan class interface diawalai
dengan keyword "Interface [nama_kelas]". sebuah interface sama dengan abstrak class yakni tidak bisa diinstansiasi.
satu interface disa tidak mewarisi, atau bisa juga mewarisi dari satu atau lebih kleas interface yang lain, dengan kata lain kelas interface bisa saling mewarisi.
Didalam java tidak dikenankan adanya multiple inheritance, tapi
bisa dilakukan dengan mewariskan dari satu class dan diimplementasikan dari banyak interface, itulah sebabnya mengapa interface dikatakan bisa digunakan untuk menutupi kukarangan pada masalah pewarisan pada java.
jika sebuah class dalam java yang mengimplementkan sebuah interface tapi tidak mendefinisikan seluruh method yang ada pada
interface tersebut, maka class tersebut harus dideklarasikan menjadi abstrac class, dan pendefinisian method-methodnya harus didefinisikan
nantinya pada subclass yang mewarisi abstrak kelass tersebut.

berikut ini contoh program yang menggunakan interface
untuk sebagai catatan method toString() pada program dibawa nanti merupakan overiding dari kelas Objek

interface I1 {

void methodI1(); // public static by default
}

interface I2 extends I1 {

void methodI2(); // public static by default
}

class A1 {

public String methodA1() {
String strA1 = "I am in methodC1 of class A1";
return strA1;
}
public String toString() {
return "toString() method of class A1";
}
}

class B1 extends A1 implements I2 {

public void methodI1() {
System.out.println("I am in methodI1 of class B1");
}
public void methodI2() {
System.out.println("I am in methodI2 of class B1");
}
}

class C1 implements I2 {

public void methodI1() {
System.out.println("I am in methodI1 of class C1");
}
public void methodI2() {
System.out.println("I am in methodI2 of class C1");
}
}

// class D1 dideklarasikan abstrak karna class ini tidak mencakup semua
// method yang ada pada pada kelas interface yang diimplementasikannya

abstract class D1 implements I2 {

public void methodI1() {
}
// class ini tidak menimplentasikan methodI2() sehingga dideklasrasikan abstract.
}

public class InterFaceEx {

public static void main(String[] args) {
I1 i1 = new B1();
i1.methodI1(); // OK as methodI1 is present in B1
// i1.methodI2(); akan terjadi eror karna pada class B1 tidak terdapat methodI2()
// untuk mengatasinya kita gunakan casting untuk merubah interface I1 menjadi I2
((I2) i1).methodI2();
I2 i2 = new B1();
i2.methodI1(); // OK
i2.methodI2(); // OK
// kita tidak bisa meuliskan perintah String var = i1.methodA1();
// untuk menampilakn nilai string yang terdapat pada methodA1()
// kelas methodA1() tidak terdapat pada interface I1
//maka untuk itu kita lakukan casting untuk merubah i1 menjadi A1
String var2 = ((A1) i1).methodA1();
System.out.println("var2 : " + var2);
String var3 = ((B1) i1).methodA1();
System.out.println("var3 : " + var3);
String var4 = i1.toString();
System.out.println("var4 : " + var4);
String var5 = i2.toString();
System.out.println("var5 : " + var5);
I1 i3 = new C1();
String var6 = i3.toString();
System.out.println("var6 : " + var6); // ini akan menmpilkan Object method toString()
Object o1 = new B1();
// o1.methodI1(); tidak bisa dikompile karna methodI1() tidak diefinisikan pada class Objek
// To solve the probelm we need to downcast o1 reference. We can do it
// in the following 4 ways
((I1) o1).methodI1(); // 1
((I2) o1).methodI1(); // 2
((B1) o1).methodI1(); // 3
/*
*
* B1 does not have any relationship with C1 except they are "siblings".
*
* Well, you can't cast siblings into one another.
*
*/
// ((C1)o1).methodI1(); Produces a ClassCastException
}
}
sumber JavaBeginner.com

{ 0 komentar... read them below or add one }

Posting Komentar