Anda di halaman 1dari 12

Java Interfaces vs Abstract

Classes
Prepared by Viska Mutiawani

viska@unsyiah.ac.id

Interface vs Abstract Class


Abstract class digunakan sebagai class dasar yang
paling umum bagi subclass.
Abstract class digunakan agar polimorfisme
berfungsi.
Ingat, Java hanya boleh memiliki 1 superclass, jadi
jika class memiliki suatu kemiripan dengan class
yang tidak berhubungan maka dapat menggunakan
interface.

viska@unsyiah.ac.id

Interface
Kita tidak bisa mencipta objek dari interface.
Contoh ada interface:

public interface Myinterface{


void method_one();
int method_two();
}
Maka kita tidak dapat melakukan ini:
MyInterface foo = new MyInterface(); // Compile-time error.

viska@unsyiah.ac.id

Interface sebagai type data


Jadi yang dicipta adalah objek dari class yang mengimplement
interface tersebut.
Contoh ada class berikut:

public class MyClass implements MyInterface {


// ...
@Override
void method_one() {
// ...
}
@Override
int method_two() {
// ...
}
}

Maka kita boleh melakukan ini:

MyInterface foo = new MyClass();

viska@unsyiah.ac.id

Interface sebagai type data


Andai ada class lain yang mengimplement
MyInterface

class MyClass2 implements MyInterface {


// ...
}

Maka variabel foo tadi dapat dengan mudah diubah


referensinya;

MyInterface foo = new MyClass2();

Jadi interface mendefinisikan type bukan


implementasi

viska@unsyiah.ac.id

Using an interface as a type


Ketika kita mendefinisikan satu interface bermakna
kita mendefinisikan satu tipe data yang baru.
Anda dapat menggunakan nama interface sama
seperti suatu tipe data.
Syarat:

Jika anda membuat variabel bertipe data interface maka


objek yang anda simpan di dalamnya haruslah berasal
dari class yang mengimplement interface tadi.

viska@unsyiah.ac.id

viska@unsyiah.ac.id

Perkembangan Interface
Andai ada interface seperti di bawah:

public interface DoIt {


void doSomething(int i, double x);
int doSomethingElse(String s);
}

Dan anda ingin ubah menjadi:

public interface DoIt {


void doSomething(int i, double x);
int doSomethingElse(String s);
boolean didItWork(int i, double x, String s);
}

Jika anda membuat perubahan tersebut maka seluruh


class yang mengimplement DoIt tidak akan berjalan.

viska@unsyiah.ac.id

Cara untuk mengatasinya: Cara 1


Membuat interface baru turunan dari DoIt. Jadi
pengguna interface DoIt bisa milih mau versi lama or
upgrade ke versi baru.

public interface DoItPlus extends DoIt {


boolean didItWork(int i, double x, String s);
}

viska@unsyiah.ac.id

Cara untuk mengatasinya: Cara 2


diperkenalkan di Java 8

Membuat method baru sebagai default methods


public interface DoIt {
void doSomething(int i, double x);
int doSomethingElse(String s);
default boolean didItWork(int i, double x, String s) {
// Method body
}
}

Default method sudah memiliki implementasi.

Pengguna lama interface DoIt tidak perlu melakukan recompile.

Ketika extend interface yang memiliki default method, ada 3


pilihan:

10

Tidak menulis dan tidak meng-override method default.


Menulis kembali deafult method, namun ianya menjadi abstract.
Override default method.

viska@unsyiah.ac.id

Cara untuk mengatasinya: Cara 3


diperkenalkan di Java 8

Membuat method baru sebagai static method.


Static method mirip seperti default method, bedanya:

11

Static diawali static, default diawali default


Static method tidak bisa dioverride, default method boleh
dioverride

viska@unsyiah.ac.id

Contoh
public interface MyData {
default void print(String str) {
if (!isNull(str))
System.out.println("MyData Print::" + str);
}
static boolean isNull(String str) {
System.out.println("Interface Null Check");
return str == null ? true : "".equals(str) ? true : false;
}
}
12

viska@unsyiah.ac.id

Anda mungkin juga menyukai